Skip to content

Commit 88fbec7

Browse files
committed
fix test cases: move soft delete check into JOIN clause for better SQL optimization
incorporate changes in test cases
1 parent ff2d10b commit 88fbec7

File tree

4 files changed

+13
-13
lines changed

4 files changed

+13
-13
lines changed

Tests/FluentKitTests/AsyncTests/AsyncFluentKitTests.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,23 +75,23 @@ final class AsyncFluentKitTests: XCTestCase {
7575
let db = DummyDatabaseForTestSQLSerializer()
7676
_ = try await Planet.query(on: db).join(child: \Planet.$governor).all()
7777
XCTAssertEqual(db.sqlSerializers.count, 1)
78-
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "governors" ON "planets"."id" = "governors"."planet_id"#), true)
78+
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "governors" ON "planets"."id" = "governors"."planet_id" AND ("governors"."deleted_at" IS NULL OR "governors"."deleted_at" > $1)"#), true)
7979
db.reset()
8080

8181
_ = try await Planet.query(on: db).join(children: \Planet.$moons).all()
8282
XCTAssertEqual(db.sqlSerializers.count, 1)
83-
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "moons" ON "planets"."id" = "moons"."planet_id"#), true)
83+
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "moons" ON "planets"."id" = "moons"."planet_id" AND ("moons"."deleted_at" IS NULL OR "moons"."deleted_at" > $1)"#), true)
8484
db.reset()
8585

8686
_ = try await Planet.query(on: db).join(parent: \Planet.$star).all()
8787
XCTAssertEqual(db.sqlSerializers.count, 1)
88-
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "stars" ON "planets"."star_id" = "stars"."id"#), true)
88+
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "stars" ON "planets"."star_id" = "stars"."id" AND ("stars"."deleted_at" IS NULL OR "stars"."deleted_at" > $1)"#), true)
8989
db.reset()
9090

9191
_ = try await Planet.query(on: db).join(siblings: \Planet.$tags).all()
9292
XCTAssertEqual(db.sqlSerializers.count, 1)
93-
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "planet+tag" ON "planet+tag"."planet_id" = "planets"."id""#), true)
94-
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "tags" ON "planet+tag"."tag_id" = "tags"."id""#), true)
93+
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "planet+tag" ON "planet+tag"."planet_id" = "planets"."id" AND ("planet+tag"."deleted_at" IS NULL OR "planet+tag"."deleted_at" > $1)"#), true)
94+
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "tags" ON "planet+tag"."tag_id" = "tags"."id" AND ("tags"."deleted_at" IS NULL OR "tags"."deleted_at" > $1)"#), true)
9595
db.reset()
9696
}
9797

Tests/FluentKitTests/AsyncTests/AsyncQueryBuilderTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,6 @@ final class AsyncQueryBuilderTests: XCTestCase {
304304
.join(Star.self, on: \Star.$id == \Planet.$star.$id && \Star.$name != \Planet.$name)
305305
.all()
306306
XCTAssertEqual(db.sqlSerializers.count, 1)
307-
XCTAssertEqual(try db.sqlSerializers.xctAt(0).sql, #"SELECT "planets"."id" AS "planets_id", "planets"."name" AS "planets_name", "planets"."star_id" AS "planets_star_id", "planets"."possible_star_id" AS "planets_possible_star_id", "planets"."deleted_at" AS "planets_deleted_at", "stars"."id" AS "stars_id", "stars"."name" AS "stars_name", "stars"."galaxy_id" AS "stars_galaxy_id", "stars"."deleted_at" AS "stars_deleted_at" FROM "planets" INNER JOIN "stars" ON "stars"."id" = "planets"."star_id" AND "stars"."name" <> "planets"."name" WHERE ("planets"."deleted_at" IS NULL OR "planets"."deleted_at" > $1) AND ("stars"."deleted_at" IS NULL OR "stars"."deleted_at" > $2)"#)
307+
XCTAssertEqual(try db.sqlSerializers.xctAt(0).sql, #"SELECT "planets"."id" AS "planets_id", "planets"."name" AS "planets_name", "planets"."star_id" AS "planets_star_id", "planets"."possible_star_id" AS "planets_possible_star_id", "planets"."deleted_at" AS "planets_deleted_at", "stars"."id" AS "stars_id", "stars"."name" AS "stars_name", "stars"."galaxy_id" AS "stars_galaxy_id", "stars"."deleted_at" AS "stars_deleted_at" FROM "planets" INNER JOIN "stars" ON "stars"."id" = "planets"."star_id" AND "stars"."name" <> "planets"."name" AND ("stars"."deleted_at" IS NULL OR "stars"."deleted_at" > $1) WHERE ("planets"."deleted_at" IS NULL OR "planets"."deleted_at" > $2) AND ("stars"."deleted_at" IS NULL OR "stars"."deleted_at" > $3)"#)
308308
}
309309
}

Tests/FluentKitTests/FluentKitTests.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,28 +129,28 @@ final class FluentKitTests: XCTestCase {
129129
let db = DummyDatabaseForTestSQLSerializer()
130130
_ = try Planet.query(on: db).join(child: \Planet.$governor).all().wait()
131131
XCTAssertEqual(db.sqlSerializers.count, 1)
132-
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "governors" ON "planets"."id" = "governors"."planet_id"#), true)
132+
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "governors" ON "planets"."id" = "governors"."planet_id" AND ("governors"."deleted_at" IS NULL OR "governors"."deleted_at" > $1)"#), true)
133133
db.reset()
134134

135135
_ = try Planet.query(on: db).join(children: \Planet.$moons).all().wait()
136136
XCTAssertEqual(db.sqlSerializers.count, 1)
137-
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "moons" ON "planets"."id" = "moons"."planet_id"#), true)
137+
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "moons" ON "planets"."id" = "moons"."planet_id" AND ("moons"."deleted_at" IS NULL OR "moons"."deleted_at" > $1)"#), true)
138138
db.reset()
139139

140140
_ = try Planet.query(on: db).join(parent: \Planet.$star).all().wait()
141141
XCTAssertEqual(db.sqlSerializers.count, 1)
142-
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "stars" ON "planets"."star_id" = "stars"."id"#), true)
142+
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "stars" ON "planets"."star_id" = "stars"."id" AND ("stars"."deleted_at" IS NULL OR "stars"."deleted_at" > $1)"#), true)
143143
db.reset()
144144

145145
_ = try Planet.query(on: db).join(parent: \Planet.$possibleStar).all().wait()
146146
XCTAssertEqual(db.sqlSerializers.count, 1)
147-
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "stars" ON "planets"."possible_star_id" = "stars"."id"#), true)
147+
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "stars" ON "planets"."possible_star_id" = "stars"."id" AND ("stars"."deleted_at" IS NULL OR "stars"."deleted_at" > $1)"#), true)
148148
db.reset()
149149

150150
_ = try Planet.query(on: db).join(siblings: \Planet.$tags).all().wait()
151151
XCTAssertEqual(db.sqlSerializers.count, 1)
152-
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "planet+tag" ON "planet+tag"."planet_id" = "planets"."id""#), true, db.sqlSerializers.first?.sql ?? "")
153-
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "tags" ON "planet+tag"."tag_id" = "tags"."id""#), true)
152+
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "planet+tag" ON "planet+tag"."planet_id" = "planets"."id" AND ("planet+tag"."deleted_at" IS NULL OR "planet+tag"."deleted_at" > $1)"#), true, db.sqlSerializers.first?.sql ?? "")
153+
XCTAssertEqual(db.sqlSerializers.first?.sql.contains(#"INNER JOIN "tags" ON "planet+tag"."tag_id" = "tags"."id" AND ("tags"."deleted_at" IS NULL OR "tags"."deleted_at" > $1)"#), true)
154154
db.reset()
155155
}
156156

Tests/FluentKitTests/QueryBuilderTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ final class QueryBuilderTests: XCTestCase {
196196
on: .custom(#"LEFT JOIN "stars" ON "stars"."id" = "planets"."id" AND "stars"."name" = 'Sol'"#))
197197
.all().wait()
198198
XCTAssertEqual(db.sqlSerializers.count, 1)
199-
XCTAssertEqual(db.sqlSerializers.first?.sql, #"SELECT "planets"."id" AS "planets_id", "planets"."name" AS "planets_name", "planets"."star_id" AS "planets_star_id", "planets"."possible_star_id" AS "planets_possible_star_id", "planets"."deleted_at" AS "planets_deleted_at", "stars"."id" AS "stars_id", "stars"."name" AS "stars_name", "stars"."galaxy_id" AS "stars_galaxy_id", "stars"."deleted_at" AS "stars_deleted_at" FROM "planets" LEFT JOIN "stars" ON "stars"."id" = "planets"."id" AND "stars"."name" = 'Sol' WHERE ("planets"."deleted_at" IS NULL OR "planets"."deleted_at" > $1) AND ("stars"."deleted_at" IS NULL OR "stars"."deleted_at" > $2)"#)
199+
XCTAssertEqual(db.sqlSerializers.first?.sql, #"SELECT "planets"."id" AS "planets_id", "planets"."name" AS "planets_name", "planets"."star_id" AS "planets_star_id", "planets"."possible_star_id" AS "planets_possible_star_id", "planets"."deleted_at" AS "planets_deleted_at", "stars"."id" AS "stars_id", "stars"."name" AS "stars_name", "stars"."galaxy_id" AS "stars_galaxy_id", "stars"."deleted_at" AS "stars_deleted_at" FROM "planets" LEFT JOIN "stars" ON "stars"."id" = "planets"."id" AND "stars"."name" = 'Sol' AND ("stars"."deleted_at" IS NULL OR "stars"."deleted_at" > $1) WHERE ("planets"."deleted_at" IS NULL OR "planets"."deleted_at" > $2) AND ("stars"."deleted_at" IS NULL OR "stars"."deleted_at" > $3)"#)
200200
}
201201

202202
func testComplexJoinOperators() throws {

0 commit comments

Comments
 (0)