From 534040f7c1bccd154adde48fdd93a44e7b13ec95 Mon Sep 17 00:00:00 2001 From: Jose Lorenzo Rodriguez Date: Wed, 27 Jun 2012 23:32:49 -0430 Subject: [PATCH] Implemented Connection::delete() --- .../Model/Datasource/Database/Connection.php | 17 ++++++++-- .../Datasource/Database/ConnectionTest.php | 32 +++++++++++++++++++ 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/lib/Cake/Model/Datasource/Database/Connection.php b/lib/Cake/Model/Datasource/Database/Connection.php index d8d2aa7c2f0..80134b1c4c3 100644 --- a/lib/Cake/Model/Datasource/Database/Connection.php +++ b/lib/Cake/Model/Datasource/Database/Connection.php @@ -190,10 +190,23 @@ public function update($table, array $data, array $conditions = array(), $types * * @param string $table the table to delete rows from * @param array $conditions conditions to be set for delete statement + * @param array $types list of associative array containing the types to be used for casting * @return Cake\Model\Datasource\Database\Statement **/ - public function delete($table, $conditions = array()) { - + public function delete($table, $conditions = array(), $types = array()) { + $this->connect(); + $conditionsKeys = array_keys($conditions); + $sql = 'DELETE FROM %s %s'; + list($conditions, $params) = $this->_parseConditions($conditions); + $sql = sprintf( + $sql, + $table, + $conditions + ); + if (!empty($types)) { + $types = $this->_mapTypes($conditionsKeys, $types); + } + return $this->execute($sql, $params, $types); } /** diff --git a/lib/Cake/Test/TestCase/Model/Datasource/Database/ConnectionTest.php b/lib/Cake/Test/TestCase/Model/Datasource/Database/ConnectionTest.php index 20d15cfb519..7d0c5914247 100644 --- a/lib/Cake/Test/TestCase/Model/Datasource/Database/ConnectionTest.php +++ b/lib/Cake/Test/TestCase/Model/Datasource/Database/ConnectionTest.php @@ -333,4 +333,36 @@ public function testUpdateWithConditionsAndTypes() { $this->assertEquals('2012-01-01', $row['body']); } +/** + * Tests delete from table with no conditions + * + * @return void + **/ + public function testDeleteNoConditions() { + $this->_insertTwoRecords(); + $this->connection->delete('things'); + $result = $this->connection->execute('SELECT * FROM things'); + $this->assertCount(0, $result); + } + + +/** + * Tests delete from table with conditions + * @return void + **/ + public function testDeleteWithConditions() { + $this->_insertTwoRecords(); + $this->connection->delete('things', array('id' => '1-rest-is-ommited'), array('id' => 'integer')); + $result = $this->connection->execute('SELECT * FROM things'); + $this->assertCount(1, $result); + + $this->connection->delete('things', array('id' => '1-rest-is-ommited'), array('id' => 'integer')); + $result = $this->connection->execute('SELECT * FROM things'); + $this->assertCount(1, $result); + + $this->connection->delete('things', array('id' => '2-rest-is-ommited'), array('id' => 'integer')); + $result = $this->connection->execute('SELECT * FROM things'); + $this->assertCount(0, $result); + } + }