MergeQuery::execute
public function MergeQuery::execute
public MergeQuery::execute()
Runs the query against the database.
Overrides Query::execute
File
- includes/database/query.inc, line 1608
- Non-specific Database query code. Used by all engines.
Class
- MergeQuery
- General class for an abstracted MERGE query operation.
Code
public function execute() { if (!count($this->condition)) { throw new InvalidMergeQueryException(t('Invalid merge query: no conditions')); } $select = $this->connection->select($this->conditionTable) ->condition($this->condition); $select->addExpression('1'); if (!$select->execute()->fetchField()) { try { $insert = $this->connection->insert($this->table)->fields($this->insertFields); if ($this->defaultFields) { $insert->useDefaults($this->defaultFields); } $insert->execute(); return self::STATUS_INSERT; } catch (Exception $e) { // The insert query failed, maybe it's because a racing insert query // beat us in inserting the same row. Retry the select query, if it // returns a row, ignore the error and continue with the update // query below. if (!$select->execute()->fetchField()) { throw $e; } } } if ($this->needsUpdate) { $update = $this->connection->update($this->table) ->fields($this->updateFields) ->condition($this->condition); if ($this->expressionFields) { foreach ($this->expressionFields as $field => $data) { $update->expression($field, $data['expression'], $data['arguments']); } } $update->execute(); return self::STATUS_UPDATE; } }
© 2001–2016 by the original authors
Licensed under the GNU General Public License, version 2 and later.
Drupal is a registered trademark of Dries Buytaert.
https://api.drupal.org/api/drupal/includes!database!query.inc/function/MergeQuery::execute/7.x