2013-06-21 00:32:08 +02:00
|
|
|
<?php
|
|
|
|
|
2016-06-15 06:03:16 +02:00
|
|
|
namespace SilverStripe\ORM\Queries;
|
|
|
|
|
|
|
|
use Injector;
|
|
|
|
|
2013-06-21 00:32:08 +02:00
|
|
|
/**
|
|
|
|
* Object representing a SQL DELETE query.
|
|
|
|
* The various parts of the SQL query can be manipulated individually.
|
|
|
|
*
|
|
|
|
* @package framework
|
2016-06-15 06:03:16 +02:00
|
|
|
* @subpackage orm
|
2013-06-21 00:32:08 +02:00
|
|
|
*/
|
|
|
|
class SQLDelete extends SQLConditionalExpression {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* List of tables to limit the delete to, if multiple tables
|
|
|
|
* are specified in the condition clause
|
|
|
|
*
|
|
|
|
* @see http://dev.mysql.com/doc/refman/5.0/en/delete.html
|
|
|
|
*
|
|
|
|
* @var array
|
|
|
|
*/
|
|
|
|
protected $delete = array();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Construct a new SQLDelete.
|
|
|
|
*
|
|
|
|
* @param array|string $from An array of Tables (FROM clauses). The first one should be just the table name.
|
2014-07-14 23:31:03 +02:00
|
|
|
* Each should be ANSI quoted.
|
2013-06-21 00:32:08 +02:00
|
|
|
* @param array $where An array of WHERE clauses.
|
|
|
|
* @param array|string $delete The table(s) to delete, if multiple tables are queried from
|
|
|
|
* @return self Self reference
|
|
|
|
*/
|
|
|
|
public static function create($from = array(), $where = array(), $delete = array()) {
|
|
|
|
return Injector::inst()->createWithArgs(__CLASS__, func_get_args());
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Construct a new SQLDelete.
|
|
|
|
*
|
|
|
|
* @param array|string $from An array of Tables (FROM clauses). The first one should be just the table name.
|
2014-07-14 23:31:03 +02:00
|
|
|
* Each should be ANSI quoted.
|
2013-06-21 00:32:08 +02:00
|
|
|
* @param array $where An array of WHERE clauses.
|
|
|
|
* @param array|string $delete The table(s) to delete, if multiple tables are queried from
|
|
|
|
*/
|
|
|
|
function __construct($from = array(), $where = array(), $delete = array()) {
|
|
|
|
parent::__construct($from, $where);
|
|
|
|
$this->setDelete($delete);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* List of tables to limit the delete to, if multiple tables
|
|
|
|
* are specified in the condition clause
|
|
|
|
*
|
|
|
|
* @return array
|
|
|
|
*/
|
|
|
|
public function getDelete() {
|
|
|
|
return $this->delete;
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the list of tables to limit the delete to, if multiple tables
|
|
|
|
* are specified in the condition clause
|
|
|
|
*
|
|
|
|
* @param string|array $tables Escaped SQL statement, usually an unquoted table name
|
|
|
|
* @return self Self reference
|
|
|
|
*/
|
|
|
|
public function setDelete($tables) {
|
|
|
|
$this->delete = array();
|
|
|
|
return $this->addDelete($tables);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sets the list of tables to limit the delete to, if multiple tables
|
|
|
|
* are specified in the condition clause
|
|
|
|
*
|
|
|
|
* @param string|array $tables Escaped SQL statement, usually an unquoted table name
|
|
|
|
* @return self Self reference
|
|
|
|
*/
|
|
|
|
public function addDelete($tables) {
|
|
|
|
if(is_array($tables)) {
|
|
|
|
$this->delete = array_merge($this->delete, $tables);
|
|
|
|
} elseif(!empty($tables)) {
|
|
|
|
$this->delete[str_replace(array('"','`'), '', $tables)] = $tables;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|