diff options
author | Andrey Andreev <narf@bofh.bg> | 2012-04-09 11:28:11 +0200 |
---|---|---|
committer | Andrey Andreev <narf@bofh.bg> | 2012-04-09 11:28:11 +0200 |
commit | 5c0e9fe409e9ca87cc9daf39ae9029c026ad01cc (patch) | |
tree | 84e1335ededba10c15c49dcc56a64ab19cdd4146 /system/database/drivers/sqlsrv | |
parent | 5f56246efd8ae86b327835ddaf67bc0d726700a3 (diff) |
Fix AR delete() for MSSQL and SQLSRV
Diffstat (limited to 'system/database/drivers/sqlsrv')
-rw-r--r-- | system/database/drivers/sqlsrv/sqlsrv_driver.php | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/system/database/drivers/sqlsrv/sqlsrv_driver.php b/system/database/drivers/sqlsrv/sqlsrv_driver.php index 582796b4e..951567033 100644 --- a/system/database/drivers/sqlsrv/sqlsrv_driver.php +++ b/system/database/drivers/sqlsrv/sqlsrv_driver.php @@ -470,12 +470,22 @@ class CI_DB_sqlsrv_driver extends CI_DB { * * @param string the table name * @param array the where clause + * @param array the like clause * @param string the limit clause * @return string */ - protected function _delete($table, $where) + protected function _delete($table, $where = array(), $like = array(), $limit = FALSE) { - return 'DELETE FROM '.$table.' WHERE '.implode(' ', $where); + $conditions = array(); + + empty($where) OR $conditions[] = implode(' ', $where); + empty($like) OR $conditions[] = implode(' ', $like); + + $conditions = (count($conditions) > 0) ? ' WHERE '.implode(' AND ', $conditions) : ''; + + return ($limit) + ? 'WITH ci_delete AS (SELECT TOP '.$limit.' * FROM '.$table.$conditions.') DELETE FROM ci_delete' + : 'DELETE FROM '.$table.$conditions; } // -------------------------------------------------------------------- |