forked from pointfreeco/sqlite-data
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDatabaseFunctionTests.swift
More file actions
70 lines (65 loc) · 1.62 KB
/
DatabaseFunctionTests.swift
File metadata and controls
70 lines (65 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import DependenciesTestSupport
import Foundation
import SQLiteData
import SQLiteDataTestSupport
import Testing
struct DatabaseFunctionTests {
@DatabaseFunction
func exclaim(_ text: String) -> String {
text + "!"
}
@Test func scalarFunction() async throws {
var configuration = Configuration()
configuration.prepareDatabase { db in
db.add(function: $exclaim)
}
let database = try DatabaseQueue(configuration: configuration)
assertQuery(Values($exclaim("Blob")), database: database) {
"""
┌─────────┐
│ "Blob!" │
└─────────┘
"""
}
}
@Test(.dependency(\.defaultDatabase, try .database())) func aggregateFunction() async throws {
assertQuery(Record.select { $sum($0.id) }) {
"""
┌───┐
│ 6 │
└───┘
"""
}
}
}
@Table
private struct Record: Equatable {
let id: Int
}
@DatabaseFunction
func sum(_ xs: some Sequence<Int>) -> Int {
xs.reduce(0, +)
}
extension DatabaseWriter where Self == DatabaseQueue {
fileprivate static func database() throws -> DatabaseQueue {
var configuration = Configuration()
configuration.prepareDatabase { db in
db.add(function: $sum)
}
let database = try DatabaseQueue(configuration: configuration)
try database.write { db in
try #sql(
"""
CREATE TABLE "records" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT
)
"""
)
.execute(db)
for _ in 1...3 {
_ = try Record.insert { Record.Draft() }.execute(db)
}
}
return database
}
}