class Update

Same name in this branch

SQLite specific implementation of UpdateQuery.

SQLite counts all the rows that match the conditions as modified, even if they will not be affected by the query. We workaround this by ensuring that we don't select those rows.

A query like this one: UPDATE test SET name = 'newname' WHERE tid = 1 will become: UPDATE test SET name = 'newname' WHERE tid = 1 AND name <> 'newname'

Hierarchy

Expanded class hierarchy of Update

22 string references to 'Update'
BulkForm::views_form in drupal/core/modules/action/lib/Drupal/action/Plugin/views/field/BulkForm.php
Implements \Drupal\views\Plugin\views\Plugin\field\FieldPluginBase::views_form().
BulkFormTest::testBulkForm in drupal/core/modules/action/lib/Drupal/action/Tests/BulkFormTest.php
Tests the bulk form.
CommentApprovalTest::testApprovalAdminInterface in drupal/core/modules/comment/lib/Drupal/comment/Tests/CommentApprovalTest.php
Test comment approval functionality through admin/content/comment.
CommentTestBase::performCommentOperation in drupal/core/modules/comment/lib/Drupal/comment/Tests/CommentTestBase.php
Performs the specified operation on the specified comment.
comment_admin_overview in drupal/core/modules/comment/comment.admin.inc
Form constructor for the comment overview administration form.

... See full list

File

drupal/core/lib/Drupal/Core/Database/Driver/sqlite/Update.php, line 26
Definition of Drupal\Core\Database\Driver\sqlite\Update

Namespace

Drupal\Core\Database\Driver\sqlite
View source
class Update extends QueryUpdate {

  /**
   * Helper function that removes the fields that are already in a condition.
   *
   * @param $fields
   *   The fields.
   * @param QueryConditionInterface $condition
   *   A database condition.
   */
  protected function removeFieldsInCondition(&$fields, ConditionInterface $condition) {
    foreach ($condition
      ->conditions() as $child_condition) {
      if (isset($child_condition['field'])) {
        if ($child_condition['field'] instanceof ConditionInterface) {
          $this
            ->removeFieldsInCondition($fields, $child_condition['field']);
        }
        else {
          unset($fields[$child_condition['field']]);
        }
      }
    }
  }
  public function execute() {
    if (!empty($this->queryOptions['sqlite_return_matched_rows'])) {
      return parent::execute();
    }

    // Get the fields used in the update query, and remove those that are already
    // in the condition.
    $fields = $this->expressionFields + $this->fields;
    $this
      ->removeFieldsInCondition($fields, $this->condition);

    // Add the inverse of the fields to the condition.
    $condition = new Condition('OR');
    foreach ($fields as $field => $data) {
      if (is_array($data)) {

        // The field is an expression.
        $condition
          ->where($field . ' <> ' . $data['expression']);
        $condition
          ->isNull($field);
      }
      elseif (!isset($data)) {

        // The field will be set to NULL.
        $condition
          ->isNotNull($field);
      }
      else {
        $condition
          ->condition($field, $data, '<>');
        $condition
          ->isNull($field);
      }
    }
    if (count($condition)) {
      $condition
        ->compile($this->connection, $this);
      $this->condition
        ->where((string) $condition, $condition
        ->arguments());
    }
    return parent::execute();
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Query::$comments protected property An array of comments that can be prepended to a query.
Query::$connection protected property The connection object on which to run this query.
Query::$connectionKey protected property The key of the connection object.
Query::$connectionTarget protected property The target of the connection object.
Query::$nextPlaceholder protected property The placeholder counter.
Query::$queryOptions protected property The query options to pass on to the connection object.
Query::$uniqueIdentifier protected property A unique identifier for this query object.
Query::comment public function Adds a comment to the query.
Query::getComments public function Returns a reference to the comments array for the query.
Query::nextPlaceholder public function Gets the next placeholder value for this query object. Overrides PlaceholderInterface::nextPlaceholder
Query::uniqueIdentifier public function Returns a unique identifier for this object. Overrides PlaceholderInterface::uniqueIdentifier
Query::__clone public function Implements the magic __clone function. 1
Query::__sleep public function Implements the magic __sleep function to disconnect from the database.
Query::__wakeup public function Implements the magic __wakeup function to reconnect to the database.
Update::$arguments protected property An array of values to update to.
Update::$condition protected property The condition object for this query.
Update::$expressionFields protected property Array of fields to update to an expression in case of a duplicate record.
Update::$fields protected property An array of fields that will be updated.
Update::$table protected property The table to update.
Update::arguments public function Implements Drupal\Core\Database\Query\ConditionInterface::arguments(). Overrides ConditionInterface::arguments
Update::compile public function Implements Drupal\Core\Database\Query\ConditionInterface::compile(). Overrides ConditionInterface::compile
Update::compiled public function Implements Drupal\Core\Database\Query\ConditionInterface::compiled(). Overrides ConditionInterface::compiled
Update::condition public function Implements Drupal\Core\Database\Query\ConditionInterface::condition(). Overrides ConditionInterface::condition
Update::conditions public function Implements Drupal\Core\Database\Query\ConditionInterface::conditions(). Overrides ConditionInterface::conditions
Update::execute public function Executes the UPDATE query. Overrides Update::execute
Update::exists public function Implements Drupal\Core\Database\Query\ConditionInterface::exists(). Overrides ConditionInterface::exists
Update::expression public function Specifies fields to be updated as an expression.
Update::fields public function Adds a set of field->value pairs to be updated.
Update::isNotNull public function Implements Drupal\Core\Database\Query\ConditionInterface::isNotNull(). Overrides ConditionInterface::isNotNull
Update::isNull public function Implements Drupal\Core\Database\Query\ConditionInterface::isNull(). Overrides ConditionInterface::isNull
Update::notExists public function Implements Drupal\Core\Database\Query\ConditionInterface::notExists(). Overrides ConditionInterface::notExists
Update::removeFieldsInCondition protected function Helper function that removes the fields that are already in a condition.
Update::where public function Implements Drupal\Core\Database\Query\ConditionInterface::where(). Overrides ConditionInterface::where
Update::__construct public function Constructs an Update query object. Overrides Query::__construct
Update::__toString public function Implements PHP magic __toString method to convert the query to a string. Overrides Query::__toString