All Versions
202
Latest Version
Avg Release Cycle
22 days
Latest Release
32 days ago

Changelog History
Page 1

  • v4.9.0

    January 17, 2020

    🚀 Released January 17, 2020 • diff

    🆕 New

    • #683: String concatenation
    • 0️⃣ #685 by @gjeck: Add cache for TableRecord.defaultDatabaseTableName
  • v4.8.1

    January 12, 2020

    🚀 Released January 12, 2020 • diff

    🛠 Fixed

    • #677: Fix associations altered by another association
  • v4.8.0

    January 08, 2020

    🚀 Released January 8, 2020 • diff

    🆕 New

    • ⚡️ #676: More batch delete and update
  • v4.7.0

    December 18, 2019

    🚀 Released December 18, 2019 • diff

    🆕 New

    • #656: Type inference of selected columns
    • #659: Database interruption
    • 🔒 #660: Database Lock Prevention
    • ⬆️ #662: Upgrade custom SQLite builds to version 3.30.1 (thanks to @swiftlyfalling)
    • #668: Database Suspension

    💥 Breaking Changes

    📚 [Custom SQLite builds](Documentation/CustomSQLiteBuilds.md) now disable by default the support for the Double-quoted String Literals misfeature. This is a technically a breaking change, but it fixes an SQLite bug. You can restore the previous behavior if your application relies on it:

    // Enable support for the Double-quoted String Literals misfeature
    var configuration = Configuration()
    configuration.acceptsDoubleQuotedStringLiterals = true
    let dbQueue = try DatabaseQueue(path: ..., configuration: configuration)
    

    📚 Documentation Diff

    The new [Interrupt a Database](README.md#interrupt-a-database) chapter documents the new interrupt() method.

    📚 The new [Sharing a Datatase in an App Group Container](Documentation/AppGroupContainers.md) guide explains how to setup GRDB when you share a database in an iOS App Group container.

    API Diff

     struct Configuration {
    +    var observesSuspensionNotifications: Bool // Experimental
    +    var acceptsDoubleQuotedStringLiterals: Bool
     }
    
     class Database {
    +    static let suspendNotification: Notification.Name // Experimental
    +    static let resumeNotification: Notification.Name  // Experimental
     }
    
     extension DatabaseError {
    +    var isInterruptionError: Bool { get }
     }
    
     protocol DatabaseReader {
    +    func interrupt()
     }
    
     extension SQLSpecificExpressible {
    +    #if GRDBCUSTOMSQLITE
    +    var ascNullsLast: SQLOrderingTerm { get }
    +    var descNullsFirst: SQLOrderingTerm { get }
    +    #endif
     }
    
  • v4.6.2

    November 20, 2019

    🚀 Released November 20, 2019 • diff

    🛠 Fixed

  • v4.6.1

    November 10, 2019

    🚀 Released November 10, 2019 • diff

    🛠 Fixed

    • ⚡️ #647: Honor conflict resolution for batch updates
  • v4.6.0

    November 10, 2019

    🚀 Released November 9, 2019 • diff

    🆕 New

    • ⚡️ #646: Batch updates

    📚 Documentation Diff

    ⚡️ The [Update Requests](README.md#update-requests) chapter documents the new support for batch updates introduced in the [query interface](README.md#the-query-interface).

    📚 The [Associations Guide](Documentation/AssociationsBasics.md) has gained a new [Ordered Associations](Documentation/AssociationsBasics.md#ordered-associations) chapter which explains how to define ordered HasMany and HasManyThrough associations.

  • v4.5.0

    October 15, 2019

    🚀 Released October 15, 2019 • diff

    🛠 Fixed

    • 🔧 The DatabaseMigrator.eraseDatabaseOnSchemaChange option no longer fails when migrations depend on database configuration.
    • 🛠 Fixed DatabasePool.reentrantRead which was not actually reentrant.
    • 🏗 #631: Fix custom SQLite builds
    • 📚 #632 by @runhum: Fix documentation typo

    🆕 New

    • #622: Allow observation of FTS4 virtual tables
    • 📦 #627: Swift Package Manager: define SQLite as a system library target
    • #633: SQLITE_ENABLE_PREUPDATE_HOOK support with CocoaPods
    • #635: Sunset FetchedRecordsController

    📚 Documentation Diff

    The [Support for SQLite Pre-Update Hooks](README.md#support-for-sqlite-pre-update-hooks) chapter has been updated with a way to enable extra GRDB APIs for the SQLITE_ENABLE_PREUPDATE_HOOK option with CocoaPods.

    📚 The [Demo Application](Documentation/DemoApps/GRDBDemoiOS) no longer uses [FetchedRecordsController](Documentation/FetchedRecordsController.md), which has been sunsetted. Instead, it tracks database changes with [ValueObservation](README.md#valueobservation), and animates its table view with the Swift built-in difference(from:) method.

  • v4.4.0

    September 06, 2019

    🚀 Released September 6, 2019 • diff

    🆕 New

    • #602: Don't keep the sqlCipher passphrase in memory longer than necessary
    • #603: DatabasePool write barrier

    📚 Documentation Diff

    ♻️ SQLCipher passphrase management has been refactored: you will get deprecation warnings. Check out the rewritten [Encryption](README.md#encryption) chapter in order to migrate your code and remove those warnings.

    The [Advanced DatabasePool](README.md#advanced-databasepool) chapter has been extended for the new barrierWriteWithoutTransaction method.

    API Diff

    🗄 Deprecations

     class DatabaseQueue {
    +    @available(*, deprecated)
         func change(passphrase: String) throws
     }
    
     class DatabasePool {
    +    @available(*, deprecated)
         func change(passphrase: String) throws
     }
    
     struct Configuration {
    +    @available(*, deprecated)
         var passphrase: String?
     }
    

    🆕 New Methods

     class DatabasePool {
    +    func barrierWriteWithoutTransaction<T>(_ updates: (Database) throws -> T) rethrows -> T
    +    func invalidateReadOnlyConnections()
     }
    
     class Database {
    +    func usePassphrase(_ passphrase: String) throws
    +    func changePassphrase(_ passphrase: String) throws
    +    var lastErrorCode: ResultCode
    +    var lastErrorMessage: String?
     }
    
  • v4.3.0

    August 28, 2019

    🚀 Released August 28, 2019 • diff

    🆕 New