All Versions
261
Latest Version
Avg Release Cycle
15 days
Latest Release
-

Changelog History
Page 18

  • v0.70.1 Changes

    ๐Ÿš€ Released May 30, 2016

    ๐Ÿ›  Fixed

    • โšก๏ธ Database.cachedUpdateStatement(sql) no longer returns a statement that can not be reused because it has already failed.
  • v0.70.0 Changes

    ๐Ÿš€ Released May 28, 2016

    ๐Ÿ†• New

    • ๐Ÿ“š Database.inSavepoint() allows fine-grained committing and rollbacking of database statements (documentation). Closes #61.
  • v0.69.0 Changes

    ๐Ÿš€ Released May 28, 2016

    ๐Ÿ›  Fixed

    • ๐Ÿš€ Database changes that are on hold because of a savepoint are only notified to transaction observers after the savepoint has been released. In previous versions of GRDB, savepoints had the opportunity to rollback a subset of database events, and mislead transaction observers about the actual content of a transaction. Related issue: #61.

    ๐Ÿ†• New

    • ๐Ÿ“š DatabaseEvent.copy() lets you store a database event notified to a transaction observer (documentation).
  • v0.68.0 Changes

    ๐Ÿš€ Released May 28, 2016

    ๐Ÿ†• New

    ๐Ÿš€ This release provides tools for your custom persistence mechanisms that don't use the built-in Persistable protocol, and addresses issue #60.

    • ๐Ÿ“š Database.primaryKey(tableName) lets you introspect a table's primary key (documentation).
    • ๐Ÿ“š Database.cachedSelectStatement(sql) and Database.cachedUpdateStatement(sql) provide robust caching of prepared statements (documentation)
  • v0.67.0 Changes

    ๐Ÿš€ Released May 22, 2016

    ๐Ÿ†• New

    • Row adapters let you map column names for easier row consumption (documentation). Fixes #50.
  • v0.66.0 Changes

    ๐Ÿš€ Released May 21, 2016

    ๐Ÿ›  Fixed

    • ๐Ÿ›  The Record class no longer adopts the CustomStringConvertible protocol. This frees the description identifier for your record properties. Fixes #58.

    • ๐Ÿšš Several database connections can now be used at the same time: you can move values from one database to another. Fixes #55.

    ๐Ÿ’ฅ Breaking Changes

    • ๐Ÿ”ง The maximum number of reader connections in a database pool is now configured in a Configuration object.

       final class DatabasePool {
      -    init(path: String, configuration: Configuration = default, maximumReaderCount: Int = default) throws
      +    init(path: String, configuration: Configuration = default) throws
       }
       struct Configuration {
      +    var maximumReaderCount: Int = default
       }
      
  • v0.65.0 Changes

    ๐Ÿš€ Released May 19, 2016

    ๐Ÿ›  Fixed

    • ๐Ÿ›  GRDB throws an early error when a connection to a file can not be established because it has the wrong format, or is encrypted. Fixes #54.

    ๐Ÿ’ฅ Breaking Change

    • The FetchRequest struct has been renamed QueryInterfaceRequest. A new FetchRequest protocol has been introduced. All APIs that used to consume the FetchRequest struct now consume the FetchRequest protocol.

      This change should not have any consequence on your source code, and paves the way for easier configuration of any piece of "code that fetches".

      -struct FetchRequest<T> {
      -}
      +protocol FetchRequest {
      +    func selectStatement(db: Database) throws -> SelectStatement
      +}
      +struct QueryInterfaceRequest<T> : FetchRequest {
      +    init(tableName: String)
      +}
      
  • v0.64.0 Changes

    ๐Ÿš€ Released May 18, 2016

    ๐Ÿ›  Fixed

    • โช Restored GRDBCipher framework.

    ๐Ÿ’ฅ Breaking Changes

    • ๐Ÿšš DatabaseValue.failableValue() has been removed. Instead, use DatabaseConvertible.fromDatabaseValue():

      -let date = dbValue.failableValue() as NSDate?
      +let date = NSDate.fromDatabaseValue(dbValue)
      
    • Row.databaseValue(named:) now returns an optional DatabaseValue. It is nil when the column does not exist in the row.

       class Row {
      -    func databaseValue(named columnName: String) -> DatabaseValue
      +    func databaseValue(named columnName: String) -> DatabaseValue?
       }
      
    • ๐Ÿšš Row subscripting by column name has been removed. Instead, use Row.databaseValue(named:)

       class Row {
      -    subscript(columnName: String) -> DatabaseValue?
       }
      
  • v0.63.0 Changes

    ๐Ÿš€ Released May 17, 2016

    ๐Ÿ›  Fixed

    • โช Restored support for iOS before 8.2 and OS X before 10.10. Fixes #51.

    ๐Ÿ’ฅ Breaking Changes

    • ๐Ÿ‘Œ Support for advanced migrations is not available until iOS 8.2 and OS X 10.10:

       struct DatabaseMigrator {
      -    mutating func registerMigration(identifier: String, withDisabledForeignKeyChecks disabledForeignKeyChecks: Bool = false, migrate: (Database) throws -> Void)
      +    mutating func registerMigration(identifier: String, migrate: (Database) throws -> Void)
      +    @available(iOS 8.2, OSX 10.10, *)
      +    mutating func registerMigrationWithDisabledForeignKeyChecks(identifier: String, migrate: (Database) throws -> Void)
      
  • v0.62.0 Changes

    ๐Ÿš€ Released May 12, 2016

    ๐Ÿ’ฅ Breaking Changes

    • ๐Ÿ“š FetchedRecordsController has been refactored (documentation):

      • delegate has been replaced by callbacks
      • features that target UITableView are now iOS only.
       final class FetchedRecordsController<Record: RowConvertible> {
      -    weak var delegate: FetchedRecordsControllerDelegate?
      -    func recordAtIndexPath(indexPath: NSIndexPath) -> Record
      -    func indexPathForRecord(record: Record) -> NSIndexPath?
      -    var sections: [FetchedRecordsSectionInfo<Record>]
      +    #if os(iOS)
      +        typealias WillChangeCallback = FetchedRecordsController<Record> -> ()
      +        typealias DidChangeCallback = FetchedRecordsController<Record> -> ()
      +        typealias TableViewEventCallback = (controller: FetchedRecordsController<Record>, record: Record, event: TableViewEvent) -> ()
      +        func trackChanges(
      +            recordsWillChange willChangeCallback: WillChangeCallback? = nil,
      +            tableViewEvent tableViewEventCallback: TableViewEventCallback? = nil,
      +            recordsDidChange didChangeCallback: DidChangeCallback? = nil)
      +        func recordAtIndexPath(indexPath: NSIndexPath) -> Record
      +        func indexPathForRecord(record: Record) -> NSIndexPath?
      +        var sections: [FetchedRecordsSectionInfo<Record>]
      +    #else
      +        typealias WillChangeCallback = FetchedRecordsController<Record> -> ()
      +        typealias DidChangeCallback = FetchedRecordsController<Record> -> ()
      +        func trackChanges(
      +            recordsWillChange willChangeCallback: WillChangeCallback? = nil,
      +            recordsDidChange didChangeCallback: DidChangeCallback? = nil)
      +    #endif
       }
      -protocol FetchedRecordsControllerDelegate : class { }