Skip to content

Commit c5d02ea

Browse files
committed
Merge branch 'development'
2 parents d90ba85 + d1bfce8 commit c5d02ea

File tree

69 files changed

+3086
-399
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+3086
-399
lines changed

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ GRDB adheres to [Semantic Versioning](https://semver.org/), with one exception:
77

88
#### 7.x Releases
99

10+
- `7.7.x` Releases - [7.7.0](#770)
1011
- `7.6.x` Releases - [7.6.0](#760) - [7.6.1](#761)
1112
- `7.5.x` Releases - [7.5.0](#750)
1213
- `7.4.x` Releases - [7.4.0](#740) - [7.4.1](#741)
@@ -138,6 +139,15 @@ GRDB adheres to [Semantic Versioning](https://semver.org/), with one exception:
138139

139140
---
140141

142+
## 7.7.0
143+
144+
Released September 23, 2025
145+
146+
- **New**: Update GRDB7MigrationGuide.md reference by [@emmanuel-ferdman](https://github.com/emmanuel-ferdman) in [#1807](https://github.com/groue/GRDB.swift/pull/1807)
147+
- **New**: Persistable Database Views by [@groue](https://github.com/groue) in [#1810](https://github.com/groue/GRDB.swift/pull/1810)
148+
- **New**: Support for Xcode 26 by [@groue](https://github.com/groue) in [#1813](https://github.com/groue/GRDB.swift/pull/1813)
149+
- **Fixed**: Fix another race condition regarding Task cancellation, completing [#1797](https://github.com/groue/GRDB.swift/pull/1797)
150+
141151
## 7.6.1
142152

143153
Released July 23, 2025

Documentation/DemoApps/GRDBDemo/GRDBDemo.xcodeproj/project.pbxproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@
158158
attributes = {
159159
BuildIndependentTargetsInParallel = 1;
160160
LastSwiftUpdateCheck = 1600;
161-
LastUpgradeCheck = 1600;
161+
LastUpgradeCheck = 2600;
162162
TargetAttributes = {
163163
56CFC6432C9F1DC9000B5023 = {
164164
CreatedOnToolsVersion = 16.0;
@@ -293,6 +293,7 @@
293293
MTL_FAST_MATH = YES;
294294
ONLY_ACTIVE_ARCH = YES;
295295
SDKROOT = iphoneos;
296+
STRING_CATALOG_GENERATE_SYMBOLS = YES;
296297
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
297298
SWIFT_EMIT_LOC_STRINGS = YES;
298299
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -350,6 +351,7 @@
350351
MTL_ENABLE_DEBUG_INFO = NO;
351352
MTL_FAST_MATH = YES;
352353
SDKROOT = iphoneos;
354+
STRING_CATALOG_GENERATE_SYMBOLS = YES;
353355
SWIFT_COMPILATION_MODE = wholemodule;
354356
SWIFT_EMIT_LOC_STRINGS = YES;
355357
VALIDATE_PRODUCT = YES;

Documentation/DemoApps/GRDBDemo/GRDBDemo.xcodeproj/xcshareddata/xcschemes/GRDBDemo.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1600"
3+
LastUpgradeVersion = "2600"
44
version = "1.7">
55
<BuildAction
66
parallelizeBuildables = "YES"

Documentation/DemoApps/GRDBDemo/GRDBDemo/Views/PlayerListModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ import GRDB
5656

5757
// Start observing the database.
5858
// Previous observation, if any, is cancelled.
59-
cancellable = observation.start(in: appDatabase.reader) { error in
59+
cancellable = observation.start(in: appDatabase.reader, scheduling: .immediate) { error in
6060
// Handle error
6161
} onChange: { [unowned self] players in
6262
self.players = players

GRDB.swift.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = 'GRDB.swift'
3-
s.version = '7.6.1'
3+
s.version = '7.7.0'
44

55
s.license = { :type => 'MIT', :file => 'LICENSE' }
66
s.summary = 'A toolkit for SQLite databases, with a focus on application development.'

GRDB.xcodeproj/project.pbxproj

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
56256ED025D1ACD0008C2BDD /* Table.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56256ECF25D1ACD0008C2BDD /* Table.swift */; };
8282
56256ED925D1B316008C2BDD /* ForeignKey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56256ED825D1B316008C2BDD /* ForeignKey.swift */; };
8383
562756431E963AAC0035B653 /* DatabaseWriterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 562756421E963AAC0035B653 /* DatabaseWriterTests.swift */; };
84+
562822FA2E631F2100B5A627 /* DatabaseSchemaSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = 562822F92E631F1E00B5A627 /* DatabaseSchemaSource.swift */; };
8485
562B58CB2A29BBEF00E8C75D /* Issue1383.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = 562B58CA2A29BBEF00E8C75D /* Issue1383.sqlite */; };
8586
562EA8261F17B2AC00FA528C /* CompilationProtocolTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 562EA8251F17B2AC00FA528C /* CompilationProtocolTests.swift */; };
8687
562EA82F1F17B9EB00FA528C /* CompilationSubClassTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 562EA82E1F17B9EB00FA528C /* CompilationSubClassTests.swift */; };
@@ -223,6 +224,7 @@
223224
568068311EBBA26100EFB8AA /* SQLRequestTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 568068301EBBA26100EFB8AA /* SQLRequestTests.swift */; };
224225
5682D721239582AA004B58C4 /* DatabaseSuspensionTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5682D71A239582AA004B58C4 /* DatabaseSuspensionTests.swift */; };
225226
56848973242DE36F002F9702 /* ValueObservationScheduler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56848972242DE36F002F9702 /* ValueObservationScheduler.swift */; };
227+
568515A42E66C2A70082E9A1 /* RecordMappedOnMutableViewTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 568515A32E66C2A70082E9A1 /* RecordMappedOnMutableViewTests.swift */; };
226228
5685C1932AD52EE600DA4B7A /* ListDumpFormat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5685C1922AD52EE600DA4B7A /* ListDumpFormat.swift */; };
227229
56894F752606576600268F4D /* FoundationDecimalTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56894F742606576600268F4D /* FoundationDecimalTests.swift */; };
228230
56894FB72606589700268F4D /* Decimal.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56894F94260657D600268F4D /* Decimal.swift */; };
@@ -288,6 +290,7 @@
288290
56B964B11DA51D010002DA19 /* FTS5TokenizerDescriptor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56B964B01DA51D010002DA19 /* FTS5TokenizerDescriptor.swift */; };
289291
56B964B91DA51D0A0002DA19 /* FTS5Pattern.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56B964B81DA51D0A0002DA19 /* FTS5Pattern.swift */; };
290292
56BB6EA91D3009B100A1CA52 /* SchedulingWatchdog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56BB6EA81D3009B100A1CA52 /* SchedulingWatchdog.swift */; };
293+
56BCA2622E6C28F800E4F08D /* DatabaseSchemaSourceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56BCA2612E6C28EF00E4F08D /* DatabaseSchemaSourceTests.swift */; };
291294
56BF2282241781C5003D86EB /* UtilsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56BF2281241781C5003D86EB /* UtilsTests.swift */; };
292295
56CC922C201DFFB900CB597E /* DropWhileCursorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56CC922B201DFFB900CB597E /* DropWhileCursorTests.swift */; };
293296
56CC9243201E034D00CB597E /* PrefixWhileCursorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56CC9242201E034D00CB597E /* PrefixWhileCursorTests.swift */; };
@@ -503,6 +506,7 @@
503506
56256ECF25D1ACD0008C2BDD /* Table.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Table.swift; sourceTree = "<group>"; };
504507
56256ED825D1B316008C2BDD /* ForeignKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForeignKey.swift; sourceTree = "<group>"; };
505508
562756421E963AAC0035B653 /* DatabaseWriterTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DatabaseWriterTests.swift; sourceTree = "<group>"; };
509+
562822F92E631F1E00B5A627 /* DatabaseSchemaSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatabaseSchemaSource.swift; sourceTree = "<group>"; };
506510
562B58CA2A29BBEF00E8C75D /* Issue1383.sqlite */ = {isa = PBXFileReference; lastKnownFileType = file; path = Issue1383.sqlite; sourceTree = "<group>"; };
507511
562EA8251F17B2AC00FA528C /* CompilationProtocolTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CompilationProtocolTests.swift; sourceTree = "<group>"; };
508512
562EA82E1F17B9EB00FA528C /* CompilationSubClassTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CompilationSubClassTests.swift; sourceTree = "<group>"; };
@@ -674,6 +678,7 @@
674678
568068301EBBA26100EFB8AA /* SQLRequestTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SQLRequestTests.swift; sourceTree = "<group>"; };
675679
5682D71A239582AA004B58C4 /* DatabaseSuspensionTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DatabaseSuspensionTests.swift; sourceTree = "<group>"; };
676680
56848972242DE36F002F9702 /* ValueObservationScheduler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValueObservationScheduler.swift; sourceTree = "<group>"; };
681+
568515A32E66C2A70082E9A1 /* RecordMappedOnMutableViewTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecordMappedOnMutableViewTests.swift; sourceTree = "<group>"; };
677682
5685C1922AD52EE600DA4B7A /* ListDumpFormat.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListDumpFormat.swift; sourceTree = "<group>"; };
678683
5687359E1CEDE16C009B9116 /* Betty.jpeg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = Betty.jpeg; sourceTree = "<group>"; };
679684
56894F742606576600268F4D /* FoundationDecimalTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FoundationDecimalTests.swift; sourceTree = "<group>"; };
@@ -792,6 +797,7 @@
792797
56B964C11DA521450002DA19 /* FTS5RecordTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FTS5RecordTests.swift; sourceTree = "<group>"; };
793798
56B964C21DA521450002DA19 /* FTS5TableBuilderTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FTS5TableBuilderTests.swift; sourceTree = "<group>"; };
794799
56BB6EA81D3009B100A1CA52 /* SchedulingWatchdog.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SchedulingWatchdog.swift; sourceTree = "<group>"; };
800+
56BCA2612E6C28EF00E4F08D /* DatabaseSchemaSourceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatabaseSchemaSourceTests.swift; sourceTree = "<group>"; };
795801
56BF2281241781C5003D86EB /* UtilsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UtilsTests.swift; sourceTree = "<group>"; };
796802
56C3F7521CF9F12400F6A361 /* DatabaseSavepointTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DatabaseSavepointTests.swift; sourceTree = "<group>"; };
797803
56C48E731C9A9923005DF1D9 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = "<group>"; };
@@ -997,6 +1003,7 @@
9971003
56B021C81D8C0D3900B239BB /* MutablePersistableRecordPersistenceConflictPolicyTests.swift */,
9981004
563363A91C933FF8000BE133 /* MutablePersistableRecordTests.swift */,
9991005
563363AA1C933FF8000BE133 /* PersistableRecordTests.swift */,
1006+
568515A32E66C2A70082E9A1 /* RecordMappedOnMutableViewTests.swift */,
10001007
);
10011008
name = PersistableRecord;
10021009
sourceTree = "<group>";
@@ -1486,6 +1493,7 @@
14861493
56EA86931C91DFE7002BB4DF /* DatabaseReaderTests.swift */,
14871494
564CE5BD21B8FFA300652B19 /* DatabaseRegionObservationTests.swift */,
14881495
56C3F7521CF9F12400F6A361 /* DatabaseSavepointTests.swift */,
1496+
56BCA2612E6C28EF00E4F08D /* DatabaseSchemaSourceTests.swift */,
14891497
568EB71D2921234800E59445 /* DatabaseSnapshotPoolTests.swift */,
14901498
566A8424204120B700E50BFD /* DatabaseSnapshotTests.swift */,
14911499
5682D71A239582AA004B58C4 /* DatabaseSuspensionTests.swift */,
@@ -1592,6 +1600,7 @@
15921600
569EF0E1200D2D8400A9FA45 /* DatabaseRegion.swift */,
15931601
564CE5AB21B8FAB400652B19 /* DatabaseRegionObservation.swift */,
15941602
5695311E1C907A8C00CF1A2B /* DatabaseSchemaCache.swift */,
1603+
562822F92E631F1E00B5A627 /* DatabaseSchemaSource.swift */,
15951604
566A84192041146100E50BFD /* DatabaseSnapshot.swift */,
15961605
568EB71829211E0700E59445 /* DatabaseSnapshotPool.swift */,
15971606
56A238751B9C75030082EB20 /* DatabaseValue.swift */,
@@ -1842,8 +1851,9 @@
18421851
DC3773EA19C8CBB3004FCF85 /* Project object */ = {
18431852
isa = PBXProject;
18441853
attributes = {
1854+
BuildIndependentTargetsInParallel = YES;
18451855
LastSwiftUpdateCheck = 0730;
1846-
LastUpgradeCheck = 1400;
1856+
LastUpgradeCheck = 2600;
18471857
ORGANIZATIONNAME = "Gwendal Roué";
18481858
TargetAttributes = {
18491859
56E5D7F81B4D422D00430942 = {
@@ -2009,6 +2019,7 @@
20092019
56677C15241D14450050755D /* FailureTestCase.swift in Sources */,
20102020
5615B289222B17C000061C1C /* AssociationHasOneThroughDecodableRecordTests.swift in Sources */,
20112021
56D4968A1D81316E008276D7 /* DatabaseValueConvertibleSubclassTests.swift in Sources */,
2022+
568515A42E66C2A70082E9A1 /* RecordMappedOnMutableViewTests.swift in Sources */,
20122023
5682D721239582AA004B58C4 /* DatabaseSuspensionTests.swift in Sources */,
20132024
56D496601D81304E008276D7 /* FoundationNSUUIDTests.swift in Sources */,
20142025
567F45A81F888B2600030B59 /* TruncateOptimizationTests.swift in Sources */,
@@ -2113,6 +2124,7 @@
21132124
D263F40A26C613090038B07F /* DatabaseColumnEncodingStrategyTests.swift in Sources */,
21142125
5653EAEE20944B4F00F46237 /* AssociationParallelDecodableRecordTests.swift in Sources */,
21152126
56D496861D813147008276D7 /* UpdateStatementTests.swift in Sources */,
2127+
56BCA2622E6C28F800E4F08D /* DatabaseSchemaSourceTests.swift in Sources */,
21162128
56D4965D1D81304E008276D7 /* FoundationNSNumberTests.swift in Sources */,
21172129
56B021C91D8C0D3900B239BB /* MutablePersistableRecordPersistenceConflictPolicyTests.swift in Sources */,
21182130
56D496C11D81373A008276D7 /* DatabaseQueueBackupTests.swift in Sources */,
@@ -2207,6 +2219,7 @@
22072219
566B91331FA4D3810012D5B0 /* TransactionObserver.swift in Sources */,
22082220
566475D31D981D5E00FF74B8 /* SQLOperators.swift in Sources */,
22092221
56CEB4FA1EAA2F4D00BFAF62 /* FTS3.swift in Sources */,
2222+
562822FA2E631F2100B5A627 /* DatabaseSchemaSource.swift in Sources */,
22102223
56D110CE28AFC72100E64463 /* MutablePersistableRecord+Delete.swift in Sources */,
22112224
563082E42430B6BE00C14A05 /* DatabaseCancellable.swift in Sources */,
22122225
564CE59D21B7A8B500652B19 /* RemoveDuplicates.swift in Sources */,
@@ -2539,13 +2552,15 @@
25392552
DYLIB_COMPATIBILITY_VERSION = 1;
25402553
DYLIB_CURRENT_VERSION = 1;
25412554
DYLIB_INSTALL_NAME_BASE = "@rpath";
2555+
ENABLE_MODULE_VERIFIER = YES;
25422556
INFOPLIST_FILE = Support/Info.plist;
25432557
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
25442558
LD_RUNPATH_SEARCH_PATHS = (
25452559
"$(inherited)",
25462560
"@executable_path/Frameworks",
25472561
"@loader_path/Frameworks",
25482562
);
2563+
MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
25492564
SKIP_INSTALL = YES;
25502565
SUPPORTED_PLATFORMS = "watchsimulator watchos macosx iphonesimulator iphoneos driverkit appletvsimulator appletvos";
25512566
SUPPORTS_MACCATALYST = YES;
@@ -2570,13 +2585,15 @@
25702585
DYLIB_COMPATIBILITY_VERSION = 1;
25712586
DYLIB_CURRENT_VERSION = 1;
25722587
DYLIB_INSTALL_NAME_BASE = "@rpath";
2588+
ENABLE_MODULE_VERIFIER = YES;
25732589
INFOPLIST_FILE = Support/Info.plist;
25742590
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
25752591
LD_RUNPATH_SEARCH_PATHS = (
25762592
"$(inherited)",
25772593
"@executable_path/Frameworks",
25782594
"@loader_path/Frameworks",
25792595
);
2596+
MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11";
25802597
SKIP_INSTALL = YES;
25812598
SUPPORTED_PLATFORMS = "watchsimulator watchos macosx iphonesimulator iphoneos driverkit appletvsimulator appletvos";
25822599
SUPPORTS_MACCATALYST = YES;

GRDB.xcodeproj/xcshareddata/xcschemes/GRDB.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1400"
3+
LastUpgradeVersion = "2600"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

GRDB/Core/Configuration.swift

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ public struct Configuration: Sendable {
8787
/// with the number of snapshots.
8888
///
8989
/// The default configuration label is nil.
90-
public var label: String? = nil
90+
public var label: String?
9191

9292
/// A boolean value indicating whether SQLite 3.29+ interprets
9393
/// double-quoted strings as string literals when they does not match any
@@ -329,7 +329,7 @@ public struct Configuration: Sendable {
329329

330330
/// The behavior in case of SQLITE_BUSY error, for read-only connections.
331331
/// If nil, GRDB picks a default one.
332-
var readonlyBusyMode: Database.BusyMode? = nil
332+
var readonlyBusyMode: Database.BusyMode?
333333

334334
/// The maximum number of concurrent reader connections.
335335
///
@@ -387,15 +387,15 @@ public struct Configuration: Sendable {
387387
/// ``qos`` property.
388388
///
389389
/// The default is nil.
390-
public var targetQueue: DispatchQueue? = nil
390+
public var targetQueue: DispatchQueue?
391391

392392
/// The target dispatch queue for write database accesses.
393393
///
394394
/// If this queue is nil, writer connections are controlled
395395
/// by ``targetQueue``.
396396
///
397397
/// The default is nil.
398-
public var writeTargetQueue: DispatchQueue? = nil
398+
public var writeTargetQueue: DispatchQueue?
399399

400400
#if os(iOS)
401401
/// A boolean value indicating whether the database connection releases
@@ -421,6 +421,22 @@ public struct Configuration: Sendable {
421421
/// reveals that a lot of time is spent opening new SQLite connections.
422422
public var persistentReadOnlyConnections = false
423423

424+
// MARK: - Database Schema
425+
426+
/// A custom schema source.
427+
///
428+
/// The use case for a custom schema source is enabling GRDB features that
429+
/// would not work with the built-in schema introspection that is provided
430+
/// by SQLite. For example, a custom schema source can help record types
431+
/// that read or write in a database view.
432+
///
433+
/// The schema source is automatically disabled during database
434+
/// migrations performed by ``DatabaseMigrator``: those access the raw
435+
/// SQLite schema, unaltered. If a migration needs a schema source,
436+
/// you may call ``Database/withSchemaSource(_:execute:)`` from within
437+
/// the body of a migration.
438+
public var schemaSource: (any DatabaseSchemaSource)?
439+
424440
// MARK: - Factory Configuration
425441

426442
/// Creates a factory configuration.

0 commit comments

Comments
 (0)