public Merge::execute()
Runs the query against the database.
\Drupal\Core\Database\StatementInterface|null A prepared statement, or NULL if the query is not valid.
Overrides Query::execute
public function execute() { // Default options for merge queries. $this->queryOptions += array( 'throw_exception' => TRUE, ); try { 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 (IntegrityConstraintViolationException $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; } } catch (\Exception $e) { if ($this->queryOptions['throw_exception']) { throw $e; } else { return NULL; } } }
© 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/core!lib!Drupal!Core!Database!Query!Merge.php/function/Merge::execute/8.1.x