From e77d77c6b4c094483a3d85b23845436b77796d07 Mon Sep 17 00:00:00 2001 From: Derek Allard Date: Wed, 19 Dec 2007 15:01:55 +0000 Subject: Added support for limit() into update() and delete() statements in Active Record. --- system/database/DB_active_rec.php | 15 ++++++++++----- system/database/drivers/mssql/mssql_driver.php | 6 ++++-- system/database/drivers/mysql/mysql_driver.php | 6 ++++-- system/database/drivers/mysqli/mysqli_driver.php | 6 ++++-- system/database/drivers/oci8/oci8_driver.php | 6 ++++-- system/database/drivers/odbc/odbc_driver.php | 6 ++++-- system/database/drivers/postgre/postgre_driver.php | 6 ++++-- system/database/drivers/sqlite/sqlite_driver.php | 6 ++++-- 8 files changed, 38 insertions(+), 19 deletions(-) (limited to 'system') diff --git a/system/database/DB_active_rec.php b/system/database/DB_active_rec.php index 4a88bd816..cea9bddc5 100644 --- a/system/database/DB_active_rec.php +++ b/system/database/DB_active_rec.php @@ -856,12 +856,12 @@ class CI_DB_active_record extends CI_DB_driver { $table = $this->ar_from[0]; } - if ($where != null) + if ($where != NULL) { $this->where($where); } - if ($limit != null) + if ($limit != NULL) { $this->limit($limit); } @@ -884,7 +884,7 @@ class CI_DB_active_record extends CI_DB_driver { * @param mixed the where clause * @return object */ - function delete($table = '', $where = '') + function delete($table = '', $where = '', $limit = NULL) { if ($table == '') { @@ -905,6 +905,11 @@ class CI_DB_active_record extends CI_DB_driver { $this->where($where); } + if ($limit != NULL) + { + $this->limit($limit); + } + if (count($this->ar_where) == 0) { if ($this->db_debug) @@ -914,7 +919,7 @@ class CI_DB_active_record extends CI_DB_driver { return FALSE; } - $sql = $this->_delete($this->dbprefix.$table, $this->ar_where); + $sql = $this->_delete($this->dbprefix.$table, $this->ar_where, $this->ar_limit); $this->_reset_write(); return $this->query($sql); @@ -1096,7 +1101,7 @@ class CI_DB_active_record extends CI_DB_driver { /** * Resets the active record "write" values. * - * Called by the insert() or update() functions + * Called by the insert() update() and delete() functions * * @access private * @return void diff --git a/system/database/drivers/mssql/mssql_driver.php b/system/database/drivers/mssql/mssql_driver.php index 613be69b5..044fb3ced 100644 --- a/system/database/drivers/mssql/mssql_driver.php +++ b/system/database/drivers/mssql/mssql_driver.php @@ -445,9 +445,11 @@ class CI_DB_mssql_driver extends CI_DB { * @param array the where clause * @return string */ - function _delete($table, $where) + function _delete($table, $where, $limit = FALSE) { - return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where); + $limit = (!$limit) ? '' : ' LIMIT '.$limit; + + return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where).$limit; } // -------------------------------------------------------------------- diff --git a/system/database/drivers/mysql/mysql_driver.php b/system/database/drivers/mysql/mysql_driver.php index aaa9cc635..cd86ebf52 100644 --- a/system/database/drivers/mysql/mysql_driver.php +++ b/system/database/drivers/mysql/mysql_driver.php @@ -463,9 +463,11 @@ class CI_DB_mysql_driver extends CI_DB { * @param array the where clause * @return string */ - function _delete($table, $where) + function _delete($table, $where, $limit = FALSE) { - return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where); + $limit = (!$limit) ? '' : ' LIMIT '.$limit; + + return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where).$limit; } // -------------------------------------------------------------------- diff --git a/system/database/drivers/mysqli/mysqli_driver.php b/system/database/drivers/mysqli/mysqli_driver.php index f6f106eba..ebed81390 100644 --- a/system/database/drivers/mysqli/mysqli_driver.php +++ b/system/database/drivers/mysqli/mysqli_driver.php @@ -456,9 +456,11 @@ class CI_DB_mysqli_driver extends CI_DB { * @param array the where clause * @return string */ - function _delete($table, $where) + function _delete($table, $where, $limit = FALSE) { - return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where); + $limit = (!$limit) ? '' : ' LIMIT '.$limit; + + return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where).$limit; } // -------------------------------------------------------------------- diff --git a/system/database/drivers/oci8/oci8_driver.php b/system/database/drivers/oci8/oci8_driver.php index 1dd157cca..c4ab70051 100644 --- a/system/database/drivers/oci8/oci8_driver.php +++ b/system/database/drivers/oci8/oci8_driver.php @@ -559,9 +559,11 @@ class CI_DB_oci8_driver extends CI_DB { * @param array the where clause * @return string */ - function _delete($table, $where) + function _delete($table, $where, $limit = FALSE) { - return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where); + $limit = (!$limit) ? '' : ' LIMIT '.$limit; + + return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where).$limit; } // -------------------------------------------------------------------- diff --git a/system/database/drivers/odbc/odbc_driver.php b/system/database/drivers/odbc/odbc_driver.php index 66d5f89b9..040ffed9e 100644 --- a/system/database/drivers/odbc/odbc_driver.php +++ b/system/database/drivers/odbc/odbc_driver.php @@ -418,9 +418,11 @@ class CI_DB_odbc_driver extends CI_DB { * @param array the where clause * @return string */ - function _delete($table, $where) + function _delete($table, $where, $limit = FALSE) { - return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where); + $limit = (!$limit) ? '' : ' LIMIT '.$limit; + + return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where).$limit; } // -------------------------------------------------------------------- diff --git a/system/database/drivers/postgre/postgre_driver.php b/system/database/drivers/postgre/postgre_driver.php index 076d87a58..88f08b2d7 100644 --- a/system/database/drivers/postgre/postgre_driver.php +++ b/system/database/drivers/postgre/postgre_driver.php @@ -447,9 +447,11 @@ class CI_DB_postgre_driver extends CI_DB { * @param array the where clause * @return string */ - function _delete($table, $where) + function _delete($table, $where, $limit = FALSE) { - return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where); + $limit = (!$limit) ? '' : ' LIMIT '.$limit; + + return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where).$limit; } // -------------------------------------------------------------------- diff --git a/system/database/drivers/sqlite/sqlite_driver.php b/system/database/drivers/sqlite/sqlite_driver.php index b701d6b96..6189b1ff0 100644 --- a/system/database/drivers/sqlite/sqlite_driver.php +++ b/system/database/drivers/sqlite/sqlite_driver.php @@ -442,9 +442,11 @@ class CI_DB_sqlite_driver extends CI_DB { * @param array the where clause * @return string */ - function _delete($table, $where) + function _delete($table, $where, $limit = FALSE) { - return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where); + $limit = (!$limit) ? '' : ' LIMIT '.$limit; + + return "DELETE FROM ".$this->_escape_table($table)." WHERE ".implode(" ", $where).$limit; } // -------------------------------------------------------------------- -- cgit v1.2.3-24-g4f1b