     
     /// UPDATE or INSERT
     func save(db: Database) throws -> (String, Int64)? {
-        if let _ = strongPrimaryKeyDictionary {
-            do {
-                try update(db)
-                return nil
-            } catch DataMapperError.RowNotFound {
-                return try insert(db)
-            }
-        } else {
+        if strongPrimaryKeyDictionary == nil {
+            return try insert(db)
+        }
+        
+        do {
+            try update(db)
+            return nil
+        } catch DataMapperError.RowNotFound {
             return try insert(db)
         }
     }

        let sql = "DELETE FROM \(tableName.quotedDatabaseIdentifier) WHERE \(conditionSQL)"
        return try db.updateStatement(sql)
    }

    private class func selectStatement(db: Database, tableName: String, conditionColumns: [String]) -> SelectStatement {
        // "SELECT * FROM table WHERE id = ?"

    
    // MARK: - CRUD
    
    /// INSERT
    ///
    /// Returns (rowIDColumn, insertedRowID) if the row model has a currently
    /// nil RowID primary key, and nil otherwise.
    func insert(db: Database) throws -> (String, Int64)? {
        // Fail early if databaseTable is nil (not overriden)
        guard let table = databaseTable else {
            fatalError("Nil Table returned from \(rowModel.dynamicType).databaseTable")
        }
        
        // Fail early if storedDatabaseDictionary is empty (not overriden)
        guard storedDatabaseDictionary.count > 0 else {
            fatalError("Invalid empty dictionary returned from \(rowModel.dynamicType).storedDatabaseDictionary")
        }
        
        // INSERT
        let insertStatement = try DataMapper.insertStatement(db, tableName: table.name, insertedColumns: Array(storedDatabaseDictionary.keys))
        let bindings = Bindings(storedDatabaseDictionary.values)
        let changes = try insertStatement.execute(bindings: bindings)
        
        // Return inserted RowID column if needed: currently nil RowID primary key.
        if let primaryKey = table.primaryKey, case .RowID(let rowIDColumn) = primaryKey {
            guard let rowID = storedDatabaseDictionary[rowIDColumn] else {
                fatalError("\(rowModel.dynamicType).storedDatabaseDictionary must return the value for the primary key `(rowIDColumn)`")
            }
            if rowID == nil {
                // RowID is not set yet: tell RowModel
                return (rowIDColumn, changes.insertedRowID!)
            } else {
                // RowID is already set: no need for RowID.
                return nil
            }
        } else {
            // No RowID primary Key: no need for RowID
            return nil
        }
    }
