GRDB.swift/TODO.md
2019-02-25 20:17:49 +01:00

6.4 KiB

GRDB 4.0

  • FTS: prefix queries
  • Test NOT TESTED methods

Swift 4.2

Not sure

  • HiddenColumnsAdapter

  • Not sure: type safety for SQL expressions

    • Introduce some record protocol with an associated primary key type. Restrict filter(key:) methods to this type. Allow distinguishing FooId from BarId types.
    • Replace Column with TypedColumn. How to avoid code duplication (repeated types)? Keypaths?
  • Encode/decode nested records/arrays/dictionaries as JSON?

  • Cursor.underestimatedCount, which could speed up Array(cursor) and fetchAll()

  • Support for OR ROLLBACK, and mismatch between the Swift depth and the SQLite depth of nested transactions/savepoint:

    try db.inTransaction {           // Swift depth: 1, SQLite depth: 1
        try db.execute("COMMIT")     // Swift depth: 1, SQLite depth: 0
        try db.execute("INSERT ...") // Should throw an error since this statement is no longer protected by a transaction
        try db.execute("SELECT ...") // Should throw an error since this statement is no longer protected by a transaction
        return .commit 
    }
    
    try db.inTransaction {
        try db.execute("INSERT OR ROLLBACK ...") // throws 
        return .commit // not executed because of error
    }   // Should not ROLLBACK since transaction has already been rollbacked
    
    try db.inTransaction {
        do {
            try db.execute("INSERT OR ROLLBACK ...") // throws
        } catch {
        }
        try db.execute("INSERT ...") // Should throw an error since this statement is no longer protected by a transaction
        try db.execute("SELECT ...") // Should throw an error since this statement is no longer protected by a transaction
        return .commit
    }
    
    try db.inTransaction {
        do {
            try db.execute("INSERT OR ROLLBACK ...") // throws
        } catch {
        }
        return .commit  // Should throw an error since transaction has been rollbacked and user's intent can not be applied
    }
    

Requires recompilation of SQLite:

Reading list: