             storedDatabaseDictionary = rowModel.storedDatabaseDictionary
         }
         
-        /// Returns an optional (rowIDColumn, insertedRowID) if and only if the
-        /// row model should be updated.
+        /**
+        Returns (rowIDColumn, insertedRowID) if the INSERT statement has
+        generated a new SQLite rowID, and nil otherwise.
+        */
         func insert(db: Database) throws -> (String, Int64)? {
             // Fail early if databaseTable is nil (not overriden)
             guard let table = databaseTable else {

            }
        }
        
        func delete(db: Database) throws {
            // Fail early if databaseTable is nil (not overriden)
            guard let table = databaseTable else {

    
    // MARK: - Version
    
    /// A Version represents a state of a rowModel.
    private class Version {
        
        /// The rowModel. The Version will never modify it.
        let rowModel: RowModel
        
        /**
        Version keeps a copy the rowModel's storedDatabaseDictionary, so that
        this dictionary is built once whatever the database operation.
        */
        let storedDatabaseDictionary: [String: DatabaseValueConvertible?]
        
        lazy var databaseTable: Table? = self.rowModel.dynamicType.databaseTable
        
        /**
        A dictionary of primary key columns that may identify a row in the
        database. Hence its "weak" name.
        
        It is nil when rowModel has no primary key. Its values come from the
        storedDatabaseDictionary and may be nil.
        */
        lazy var weakPrimaryKeyDictionary: [String: DatabaseValueConvertible?]? = {
            guard let primaryKey = self.databaseTable?.primaryKey else {
                return nil
