function Insert::preExecute

Same name in other branches
  1. 9 core/lib/Drupal/Core/Database/Query/Insert.php \Drupal\Core\Database\Query\Insert::preExecute()
  2. 8.9.x core/lib/Drupal/Core/Database/Query/Insert.php \Drupal\Core\Database\Query\Insert::preExecute()
  3. 10 core/lib/Drupal/Core/Database/Query/Insert.php \Drupal\Core\Database\Query\Insert::preExecute()

Preprocesses and validates the query.

Return value

bool TRUE if the validation was successful, FALSE if not.

Throws

\Drupal\Core\Database\Query\FieldsOverlapException

\Drupal\Core\Database\Query\NoFieldsException

4 calls to Insert::preExecute()
Insert::execute in core/modules/sqlite/src/Driver/Database/sqlite/Insert.php
Insert::execute in core/modules/mysql/src/Driver/Database/mysql/Insert.php
Insert::execute in core/modules/pgsql/src/Driver/Database/pgsql/Insert.php
Executes the insert query.
Insert::execute in core/lib/Drupal/Core/Database/Query/Insert.php
Executes the insert query.

File

core/lib/Drupal/Core/Database/Query/Insert.php, line 141

Class

Insert
General class for an abstracted INSERT query.

Namespace

Drupal\Core\Database\Query

Code

protected function preExecute() {
    // Confirm that the user did not try to specify an identical
    // field and default field.
    if (array_intersect($this->insertFields, $this->defaultFields)) {
        throw new FieldsOverlapException('You may not specify the same field to have a value and a schema-default value.');
    }
    if (!empty($this->fromQuery)) {
        // We have to assume that the used aliases match the insert fields.
        // Regular fields are added to the query before expressions, maintain the
        // same order for the insert fields.
        // This behavior can be overridden by calling fields() manually as only the
        // first call to fields() does have an effect.
        $this->fields(array_merge(array_keys($this->fromQuery
            ->getFields()), array_keys($this->fromQuery
            ->getExpressions())));
    }
    else {
        // Don't execute query without fields.
        if (count($this->insertFields) + count($this->defaultFields) == 0) {
            throw new NoFieldsException('There are no fields available to insert with.');
        }
    }
    // If no values have been added, silently ignore this query. This can happen
    // if values are added conditionally, so we don't want to throw an
    // exception.
    if (!isset($this->insertValues[0]) && count($this->insertFields) > 0 && empty($this->fromQuery)) {
        return FALSE;
    }
    return TRUE;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.