Skip to content

Commit e493709

Browse files
authored
Mustache optimizations, plus minor DB optimizations (#6838)
1 parent a0f9643 commit e493709

File tree

5 files changed

+34
-19
lines changed

5 files changed

+34
-19
lines changed

frameworks/Swift/hummingbird/src-postgres/Package.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ let package = Package(
1111
],
1212
dependencies: [
1313
.package(url: "https://github.com/hummingbird-project/hummingbird.git", .upToNextMinor(from: "0.13.1")),
14-
.package(url: "https://github.com/hummingbird-project/hummingbird-mustache.git", from: "1.0.0"),
14+
.package(url: "https://github.com/hummingbird-project/hummingbird-mustache.git", from: "1.0.1"),
1515
.package(url: "https://github.com/vapor/postgres-kit.git", from: "2.3.0"),
1616
],
1717
targets: [

frameworks/Swift/hummingbird/src-postgres/Sources/server/Controllers/FortunesController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class FortunesController {
2727
return request.db.query("SELECT id, message FROM Fortune").map { results in
2828
var fortunes = results.map {
2929
return Fortune(
30-
id: $0.column("id")?.int32 ?? 0,
30+
id: $0.column("id")?.int32,
3131
message: $0.column("message")?.string ?? ""
3232
)
3333
}

frameworks/Swift/hummingbird/src-postgres/Sources/server/Controllers/WorldController.swift

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,29 @@ class WorldController {
99
}
1010

1111
func single(request: HBRequest) -> EventLoopFuture<World> {
12-
request.db.query("SELECT id, randomnumber FROM World WHERE id = $1", [
13-
PostgresData(int32: .random(in: 1...10_000))
12+
let id = Int32.random(in: 1...10_000)
13+
return request.db.query("SELECT id, randomnumber FROM World WHERE id = $1", [
14+
PostgresData(int32: id)
1415
]).flatMapThrowing { result -> World in
1516
guard let firstResult = result.first else { throw HBHTTPError(.notFound) }
1617
return World(
17-
id: firstResult.column("id")?.int32 ?? 0,
18-
randomNumber: firstResult.column("randomnumber")?.int ?? 0
18+
id: id,
19+
randomNumber: firstResult.column("randomnumber")?.int32 ?? 0
1920
)
2021
}
2122
}
2223

2324
func multiple(request: HBRequest) -> EventLoopFuture<[World]> {
2425
let queries = (request.uri.queryParameters.get("queries", as: Int.self) ?? 1).bound(1, 500)
2526
let futures: [EventLoopFuture<World>] = (0 ..< queries).map { _ -> EventLoopFuture<World> in
26-
request.db.query("SELECT id, randomnumber FROM World WHERE id = $1", [
27-
PostgresData(int32: .random(in: 1...10_000))
27+
let id = Int32.random(in: 1...10_000)
28+
return request.db.query("SELECT id, randomnumber FROM World WHERE id = $1", [
29+
PostgresData(int32: id)
2830
]).flatMapThrowing { result -> World in
2931
guard let firstResult = result.first else { throw HBHTTPError(.notFound) }
3032
return World(
31-
id: firstResult.column("id")?.int32 ?? 0,
32-
randomNumber: firstResult.column("randomnumber")?.int ?? 0
33+
id: id,
34+
randomNumber: firstResult.column("randomnumber")?.int32 ?? 0
3335
)
3436
}
3537
}
@@ -40,18 +42,17 @@ class WorldController {
4042
let queries = (request.uri.queryParameters.get("queries", as: Int.self) ?? 1).bound(1, 500)
4143
let ids = (0 ..< queries).map { _ in Int32.random(in: 1...10_000) }
4244
let futures: [EventLoopFuture<World>] = ids.map { _ -> EventLoopFuture<World> in
43-
request.db.query("SELECT id, randomnumber FROM World WHERE id = $1", [
44-
PostgresData(int32: .random(in: 1...10_000))
45+
let id = Int32.random(in: 1...10_000)
46+
let randomNumber = Int32.random(in: 1...10_000)
47+
return request.db.query("SELECT id, randomnumber FROM World WHERE id = $1", [
48+
PostgresData(int32: id)
4549
]).flatMap { result in
46-
guard let firstResult = result.first else { return request.failure(.notFound) }
47-
let id = firstResult.column("id")?.int32 ?? 0
48-
let randomNumber = Int32.random(in: 1...10_000)
4950
return request.db.query("UPDATE World SET randomnumber = $1 WHERE id = $2", [
5051
PostgresData(int32: randomNumber),
5152
PostgresData(int32: id)
52-
]).map { ($0, World(id: id, randomNumber: numericCast(randomNumber))) }
53-
}.map { (result: PostgresQueryResult, world) in
54-
return world
53+
])
54+
}.map { _ in
55+
return World(id: id, randomNumber: randomNumber)
5556
}
5657
}
5758
return EventLoopFuture.whenAllSucceed(futures, on: request.eventLoop)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,21 @@
11
import Hummingbird
2+
import HummingbirdMustache
23

34
struct Fortune: HBResponseEncodable {
45
var id: Int32?
56
var message: String
67
}
78

9+
// avoid using Mirror as it is expensive
10+
extension Fortune: HBMustacheParent {
11+
func child(named: String) -> Any? {
12+
switch named {
13+
case "id":
14+
return id
15+
case "message":
16+
return message
17+
default:
18+
return nil
19+
}
20+
}
21+
}

frameworks/Swift/hummingbird/src-postgres/Sources/server/Models/World.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ import Hummingbird
22

33
struct World: HBResponseEncodable {
44
var id: Int32?
5-
var randomNumber: Int
5+
var randomNumber: Int32
66
}
77

0 commit comments

Comments
 (0)