Skip to content

Commit 361a482

Browse files
committed
Enable SQLITE_ENABLE_SNAPSHOT by default and introduce SQLITE_DISABLE_SNAPSHOT
1 parent 8cba324 commit 361a482

14 files changed

+61
-56
lines changed

GRDB/Core/DatabasePool.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -684,7 +684,7 @@ extension DatabasePool: DatabaseReader {
684684

685685
// MARK: - WAL Snapshot Transactions
686686

687-
#if SQLITE_ENABLE_SNAPSHOT
687+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
688688
/// Returns a long-lived WAL snapshot transaction on a reader connection.
689689
func walSnapshotTransaction() throws -> WALSnapshotTransaction {
690690
guard let readerPool else {
@@ -950,7 +950,7 @@ extension DatabasePool {
950950
purpose: "snapshot.\(databaseSnapshotCountMutex.increment())")
951951
}
952952

953-
#if SQLITE_ENABLE_SNAPSHOT
953+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
954954
/// Creates a database snapshot that allows concurrent accesses to an
955955
/// unchanging database content, as it exists at the moment the snapshot
956956
/// is created.

GRDB/Core/DatabaseSnapshotPool.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#if SQLITE_ENABLE_SNAPSHOT
1+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
22
// Import C SQLite functions
33
#if GRDBCIPHER // CocoaPods (SQLCipher subspec)
44
import SQLCipher

GRDB/Core/WALSnapshot.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#if SQLITE_ENABLE_SNAPSHOT
1+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
22
// Import C SQLite functions
33
#if GRDBCIPHER // CocoaPods (SQLCipher subspec)
44
import SQLCipher

GRDB/Core/WALSnapshotTransaction.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#if SQLITE_ENABLE_SNAPSHOT
1+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
22
/// A long-live read-only WAL transaction.
33
///
44
/// `WALSnapshotTransaction` **takes ownership** of its reader

GRDB/ValueObservation/Observers/ValueConcurrentObserver.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ extension ValueConcurrentObserver {
276276
}
277277
}
278278

279-
#if SQLITE_ENABLE_SNAPSHOT
279+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
280280
extension ValueConcurrentObserver {
281281
/// Synchronously starts the observation, and returns the initial value.
282282
///

Package.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,13 @@ let darwinPlatforms: [Platform] = [
1414
]
1515
var swiftSettings: [SwiftSetting] = [
1616
.define("SQLITE_ENABLE_FTS5"),
17-
// SQLite snapshots are available on the system SQLite on Darwin platforms.
18-
.define("SQLITE_ENABLE_SNAPSHOT", .when(platforms: darwinPlatforms, traits: ["GRDBSQLite"])),
17+
// Until Xcode has proper support for package traits, we must enable
18+
// SQLITE_ENABLE_SNAPSHOT by default so that Xcode projects that build
19+
// a Darwin app can depend on GRDB and profit from WAL snapshots.
20+
// Package traits who want to disable snapshots must set SQLITE_DISABLE_SNAPSHOT.
21+
// TODO: when Xcode support traits, remove all mentions of SQLITE_DISABLE_SNAPSHOT and update as below:
22+
// .define("SQLITE_ENABLE_SNAPSHOT", .when(platforms: darwinPlatforms, traits: ["GRDBSQLite"])),
23+
.define("SQLITE_ENABLE_SNAPSHOT"),
1924
]
2025
var cSettings: [CSetting] = []
2126
var dependencies: [PackageDescription.Package.Dependency] = []

Tests/GRDBCombineTests/DatabaseReaderReadPublisherTests.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class DatabaseReaderReadPublisherTests : XCTestCase {
4040
try Test(test).runAtTemporaryDatabasePath { try setUp(DatabaseQueue(path: $0)) }
4141
try Test(test).runAtTemporaryDatabasePath { try setUp(DatabasePool(path: $0)) }
4242
try Test(test).runAtTemporaryDatabasePath { try setUp(DatabasePool(path: $0)).makeSnapshot() }
43-
#if SQLITE_ENABLE_SNAPSHOT
43+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
4444
try Test(test).runAtTemporaryDatabasePath { try setUp(DatabasePool(path: $0)).makeSnapshotPool() }
4545
#endif
4646
}
@@ -141,7 +141,7 @@ class DatabaseReaderReadPublisherTests : XCTestCase {
141141
try Test(test).runAtTemporaryDatabasePath { try DatabaseQueue(path: $0) }
142142
try Test(test).runAtTemporaryDatabasePath { try DatabasePool(path: $0) }
143143
try Test(test).runAtTemporaryDatabasePath { try DatabasePool(path: $0).makeSnapshot() }
144-
#if SQLITE_ENABLE_SNAPSHOT
144+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
145145
try Test(test).runAtTemporaryDatabasePath { try DatabasePool(path: $0).makeSnapshotPool() }
146146
#endif
147147
}
@@ -177,7 +177,7 @@ class DatabaseReaderReadPublisherTests : XCTestCase {
177177
try Test(test).runAtTemporaryDatabasePath { try setUp(DatabaseQueue(path: $0)) }
178178
try Test(test).runAtTemporaryDatabasePath { try setUp(DatabasePool(path: $0)) }
179179
try Test(test).runAtTemporaryDatabasePath { try setUp(DatabasePool(path: $0)).makeSnapshot() }
180-
#if SQLITE_ENABLE_SNAPSHOT
180+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
181181
try Test(test).runAtTemporaryDatabasePath { try setUp(DatabasePool(path: $0)).makeSnapshotPool() }
182182
#endif
183183
}
@@ -213,7 +213,7 @@ class DatabaseReaderReadPublisherTests : XCTestCase {
213213
try Test(test).runAtTemporaryDatabasePath { try setUp(DatabaseQueue(path: $0)) }
214214
try Test(test).runAtTemporaryDatabasePath { try setUp(DatabasePool(path: $0)) }
215215
try Test(test).runAtTemporaryDatabasePath { try setUp(DatabasePool(path: $0)).makeSnapshot() }
216-
#if SQLITE_ENABLE_SNAPSHOT
216+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
217217
try Test(test).runAtTemporaryDatabasePath { try setUp(DatabasePool(path: $0)).makeSnapshotPool() }
218218
#endif
219219
}
@@ -250,7 +250,7 @@ class DatabaseReaderReadPublisherTests : XCTestCase {
250250
try Test(test).runAtTemporaryDatabasePath { try setUp(DatabaseQueue(path: $0)) }
251251
try Test(test).runAtTemporaryDatabasePath { try setUp(DatabasePool(path: $0)) }
252252
try Test(test).runAtTemporaryDatabasePath { try setUp(DatabasePool(path: $0)).makeSnapshot() }
253-
#if SQLITE_ENABLE_SNAPSHOT
253+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
254254
try Test(test).runAtTemporaryDatabasePath { try setUp(DatabasePool(path: $0)).makeSnapshotPool() }
255255
#endif
256256
}
@@ -274,7 +274,7 @@ class DatabaseReaderReadPublisherTests : XCTestCase {
274274
try Test(test).runAtTemporaryDatabasePath { try DatabaseQueue(path: $0) }
275275
try Test(test).runAtTemporaryDatabasePath { try DatabasePool(path: $0) }
276276
try Test(test).runAtTemporaryDatabasePath { try DatabasePool(path: $0).makeSnapshot() }
277-
#if SQLITE_ENABLE_SNAPSHOT
277+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
278278
try Test(test).runAtTemporaryDatabasePath { try DatabasePool(path: $0).makeSnapshotPool() }
279279
#endif
280280
}

Tests/GRDBTests/DatabaseAbortedTransactionTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class DatabaseAbortedTransactionTests : GRDBTestCase {
4040
try test(makeDatabaseQueue())
4141
try test(makeDatabasePool())
4242
try test(makeDatabasePool().makeSnapshot())
43-
#if SQLITE_ENABLE_SNAPSHOT
43+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
4444
try test(makeDatabasePool().makeSnapshotPool())
4545
#endif
4646
}
@@ -85,7 +85,7 @@ class DatabaseAbortedTransactionTests : GRDBTestCase {
8585
try test(makeDatabaseQueue())
8686
try test(makeDatabasePool())
8787
try test(makeDatabasePool().makeSnapshot())
88-
#if SQLITE_ENABLE_SNAPSHOT
88+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
8989
try test(makeDatabasePool().makeSnapshotPool())
9090
#endif
9191
}

Tests/GRDBTests/DatabaseConfigurationTests.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class DatabaseConfigurationTests: GRDBTestCase {
2727
try pool.makeSnapshot().read { _ in }
2828
XCTAssertEqual(connectionCountMutex.load(), 5)
2929

30-
#if SQLITE_ENABLE_SNAPSHOT
30+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
3131
try pool.makeSnapshotPool().read { _ in }
3232
XCTAssertEqual(connectionCountMutex.load(), 6)
3333
#endif
@@ -74,7 +74,7 @@ class DatabaseConfigurationTests: GRDBTestCase {
7474
XCTFail("Expected TestError")
7575
} catch is TestError { }
7676

77-
#if SQLITE_ENABLE_SNAPSHOT
77+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
7878
do {
7979
errorMutex.store(TestError())
8080
_ = try pool.makeSnapshotPool()

Tests/GRDBTests/DatabasePoolTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ class DatabasePoolTests: GRDBTestCase {
5353
XCTAssertTrue(fm.fileExists(atPath: dbPool.path + "-wal"))
5454
XCTAssertTrue(fm.fileExists(atPath: dbPool.path + "-shm"))
5555

56-
#if SQLITE_ENABLE_SNAPSHOT
56+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
5757
// A non-empty wal file makes sure ValueObservation can use wal snapshots.
5858
// See <https://github.com/groue/GRDB.swift/issues/1383>
5959
let walURL = URL(fileURLWithPath: dbPool.path + "-wal")
@@ -77,7 +77,7 @@ class DatabasePoolTests: GRDBTestCase {
7777
XCTAssertTrue(fm.fileExists(atPath: dbPool.path + "-wal"))
7878
XCTAssertTrue(fm.fileExists(atPath: dbPool.path + "-shm"))
7979

80-
#if SQLITE_ENABLE_SNAPSHOT
80+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
8181
// A non-empty wal file makes sure ValueObservation can use wal snapshots.
8282
// See <https://github.com/groue/GRDB.swift/issues/1383>
8383
let walURL = URL(fileURLWithPath: dbPool.path + "-wal")
@@ -103,7 +103,7 @@ class DatabasePoolTests: GRDBTestCase {
103103
XCTAssertTrue(fm.fileExists(atPath: dbPool.path + "-wal"))
104104
XCTAssertTrue(fm.fileExists(atPath: dbPool.path + "-shm"))
105105

106-
#if SQLITE_ENABLE_SNAPSHOT
106+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
107107
// A non-empty wal file makes sure ValueObservation can use wal snapshots.
108108
// See <https://github.com/groue/GRDB.swift/issues/1383>
109109
let walURL = URL(fileURLWithPath: dbPool.path + "-wal")
@@ -126,7 +126,7 @@ class DatabasePoolTests: GRDBTestCase {
126126
XCTAssertTrue(fm.fileExists(atPath: dbPool.path + "-wal"))
127127
XCTAssertTrue(fm.fileExists(atPath: dbPool.path + "-shm"))
128128

129-
#if SQLITE_ENABLE_SNAPSHOT
129+
#if SQLITE_ENABLE_SNAPSHOT && !SQLITE_DISABLE_SNAPSHOT
130130
// A non-empty wal file makes sure ValueObservation can use wal snapshots.
131131
// See <https://github.com/groue/GRDB.swift/issues/1383>
132132
let walURL = URL(fileURLWithPath: dbPool.path + "-wal")

0 commit comments

Comments
 (0)