Add CI/CD configuration and API documentation

This commit is contained in:
2026-07-01 21:40:53 +08:00
commit c590135d68
4168 changed files with 740252 additions and 0 deletions
@@ -0,0 +1,122 @@
import XCTest
@testable import GRDB
class SchedulingWatchdogTests: GRDBTestCase {
func testSchedulingWatchdog() throws {
let dbQueue1 = try makeDatabaseQueue()
let dbQueue2 = try makeDatabaseQueue()
let dbQueue3 = try makeDatabaseQueue()
var db1: Database! = nil
var db2: Database! = nil
var db3: Database! = nil
dbQueue1.inDatabase { db1 = $0 }
dbQueue2.inDatabase { db2 = $0 }
dbQueue3.inDatabase { db3 = $0 }
XCTAssertNil(SchedulingWatchdog.current)
dbQueue1.inDatabase { _ in
XCTAssertTrue(SchedulingWatchdog.current!.allows(db1))
XCTAssertFalse(SchedulingWatchdog.current!.allows(db2))
XCTAssertFalse(SchedulingWatchdog.current!.allows(db3))
dbQueue2.inDatabase { _ in
XCTAssertTrue(SchedulingWatchdog.current!.allows(db1))
XCTAssertTrue(SchedulingWatchdog.current!.allows(db2))
XCTAssertFalse(SchedulingWatchdog.current!.allows(db3))
dbQueue3.inDatabase { _ in
XCTAssertTrue(SchedulingWatchdog.current!.allows(db1))
XCTAssertTrue(SchedulingWatchdog.current!.allows(db2))
XCTAssertTrue(SchedulingWatchdog.current!.allows(db3))
}
XCTAssertTrue(SchedulingWatchdog.current!.allows(db1))
XCTAssertTrue(SchedulingWatchdog.current!.allows(db2))
XCTAssertFalse(SchedulingWatchdog.current!.allows(db3))
}
XCTAssertTrue(SchedulingWatchdog.current!.allows(db1))
XCTAssertFalse(SchedulingWatchdog.current!.allows(db3))
XCTAssertFalse(SchedulingWatchdog.current!.allows(db2))
}
XCTAssertNil(SchedulingWatchdog.current)
}
func testDatabaseQueueFromDatabaseQueue() throws {
let dbQueue1 = try makeDatabaseQueue()
let dbQueue2 = try makeDatabaseQueue()
try dbQueue1.inDatabase { db1 in
try db1.execute(sql: "CREATE TABLE items (id INTEGER PRIMARY KEY)")
try db1.execute(sql: "INSERT INTO items (id) VALUES (NULL)")
try dbQueue2.inDatabase { db2 in
try db2.execute(sql: "CREATE TABLE items (id INTEGER PRIMARY KEY)")
let rows = try Row.fetchCursor(db1, sql: "SELECT * FROM items")
while let row = try rows.next() {
try db2.execute(sql: "INSERT INTO items (id) VALUES (?)", arguments: [row["id"]])
}
}
}
let count = try dbQueue2.inDatabase { db2 in
try Int.fetchOne(db2, sql: "SELECT COUNT(*) FROM items")!
}
XCTAssertEqual(count, 1)
}
func testDatabaseQueueFromDatabasePool() throws {
let dbPool1 = try makeDatabasePool()
let dbQueue2 = try makeDatabaseQueue()
try dbPool1.write { db1 in
try db1.execute(sql: "CREATE TABLE items (id INTEGER PRIMARY KEY)")
try db1.execute(sql: "INSERT INTO items (id) VALUES (NULL)")
try dbQueue2.inDatabase { db2 in
try db2.execute(sql: "CREATE TABLE items (id INTEGER PRIMARY KEY)")
let rows = try Row.fetchCursor(db1, sql: "SELECT * FROM items")
while let row = try rows.next() {
try db2.execute(sql: "INSERT INTO items (id) VALUES (?)", arguments: [row["id"]])
}
}
}
let count = try dbQueue2.inDatabase { db2 in
try Int.fetchOne(db2, sql: "SELECT COUNT(*) FROM items")!
}
XCTAssertEqual(count, 1)
}
func testDatabasePoolFromDatabaseQueue() throws {
let dbQueue1 = try makeDatabaseQueue()
let dbPool2 = try makeDatabasePool()
try dbQueue1.inDatabase { db1 in
try db1.execute(sql: "CREATE TABLE items (id INTEGER PRIMARY KEY)")
try db1.execute(sql: "INSERT INTO items (id) VALUES (NULL)")
try dbPool2.write { db2 in
try db2.execute(sql: "CREATE TABLE items (id INTEGER PRIMARY KEY)")
let rows = try Row.fetchCursor(db1, sql: "SELECT * FROM items")
while let row = try rows.next() {
try db2.execute(sql: "INSERT INTO items (id) VALUES (?)", arguments: [row["id"]])
}
}
}
let count = try dbPool2.read { db2 in
try Int.fetchOne(db2, sql: "SELECT COUNT(*) FROM items")!
}
XCTAssertEqual(count, 1)
}
func testDatabasePoolFromDatabasePool() throws {
let dbPool1 = try makeDatabasePool()
let dbPool2 = try makeDatabasePool()
try dbPool1.write { db1 in
try db1.execute(sql: "CREATE TABLE items (id INTEGER PRIMARY KEY)")
try db1.execute(sql: "INSERT INTO items (id) VALUES (NULL)")
try dbPool2.write { db2 in
try db2.execute(sql: "CREATE TABLE items (id INTEGER PRIMARY KEY)")
let rows = try Row.fetchCursor(db1, sql: "SELECT * FROM items")
while let row = try rows.next() {
try db2.execute(sql: "INSERT INTO items (id) VALUES (?)", arguments: [row["id"]])
}
}
}
let count = try dbPool2.write { db2 in
try Int.fetchOne(db2, sql: "SELECT COUNT(*) FROM items")!
}
XCTAssertEqual(count, 1)
}
}