public function delete(Database_Query_Builder_Delete $query = NULL)
{
if (!$query) {
$query = DB::delete($this->_table);
} else {
$query->table($this->_table);
}
if ($changed = $this->changed()) {
foreach ($changed as $field => $value) {
$query->where($this->_fields[$field]->column, '=', $this->_fields[$field]->_database_wrap($value));
}
} else {
if (is_array($this->_primary_key)) {
foreach ($this->_primary_key as $field) {
$query->where($this->_fields[$field]->column, '=', $this->_fields[$field]->_database_wrap($this->_original[$field]));
}
} else {
$query->where($this->_fields[$this->_primary_key]->column, '=', $this->_fields[$this->_primary_key]->_database_wrap($this->_original[$this->_primary_key]));
}
}
if ($query->execute($this->_db)) {
$this->state('deleted');
}
return $this;
}