Same name in this branch
- 10 core/lib/Drupal/Core/Database/Query/Insert.php \Drupal\Core\Database\Query\Insert::execute()
- 10 core/modules/mysql/src/Driver/Database/mysql/Insert.php \Drupal\mysql\Driver\Database\mysql\Insert::execute()
- 10 core/modules/pgsql/src/Driver/Database/pgsql/Insert.php \Drupal\pgsql\Driver\Database\pgsql\Insert::execute()
- 10 core/modules/sqlite/src/Driver/Database/sqlite/Insert.php \Drupal\sqlite\Driver\Database\sqlite\Insert::execute()
Same name and namespace in other branches
- 9 core/modules/sqlite/src/Driver/Database/sqlite/Insert.php \Drupal\sqlite\Driver\Database\sqlite\Insert::execute()
Executes the insert query.
Return value
int|null|string The last insert ID of the query, if one exists. If the query was given multiple sets of values to insert, the return value is undefined. If no fields are specified, this method will do nothing and return NULL. That That makes it safe to use in multi-insert loops.
Overrides Insert::execute
File
- core/
modules/ sqlite/ src/ Driver/ Database/ sqlite/ Insert.php, line 30
Class
- Insert
- SQLite implementation of \Drupal\Core\Database\Query\Insert.
Namespace
Drupal\sqlite\Driver\Database\sqliteCode
public function execute() {
if (!$this
->preExecute()) {
return NULL;
}
// If we're selecting from a SelectQuery, finish building the query and
// pass it back, as any remaining options are irrelevant.
if (!empty($this->fromQuery)) {
// The SelectQuery may contain arguments, load and pass them through.
return $this->connection
->query((string) $this, $this->fromQuery
->getArguments(), $this->queryOptions);
}
// If there are any fields in the query, execute normal INSERT statements.
if (count($this->insertFields)) {
$stmt = $this->connection
->prepareStatement((string) $this, $this->queryOptions);
if (count($this->insertValues) === 1) {
// Inserting a single row does not require a transaction to be atomic,
// and executes faster without a transaction wrapper.
$insert_values = $this->insertValues[0];
try {
$stmt
->execute($insert_values, $this->queryOptions);
} catch (\Exception $e) {
$this->connection
->exceptionHandler()
->handleExecutionException($e, $stmt, $insert_values, $this->queryOptions);
}
}
else {
// Inserting multiple rows requires a transaction to be atomic, and
// executes faster as a single transaction.
try {
$transaction = $this->connection
->startTransaction();
} catch (\PDOException $e) {
// $this->connection->exceptionHandler()->handleExecutionException()
// requires a $statement argument, so we cannot use that.
throw new DatabaseExceptionWrapper($e
->getMessage(), 0, $e);
}
foreach ($this->insertValues as $insert_values) {
try {
$stmt
->execute($insert_values, $this->queryOptions);
} catch (\Exception $e) {
// One of the INSERTs failed, rollback the whole batch.
$transaction
->rollBack();
$this->connection
->exceptionHandler()
->handleExecutionException($e, $stmt, $insert_values, $this->queryOptions);
}
}
}
// Re-initialize the values array so that we can re-use this query.
$this->insertValues = [];
}
else {
$stmt = $this->connection
->prepareStatement("INSERT INTO {{$this->table}} DEFAULT VALUES", $this->queryOptions);
try {
$stmt
->execute(NULL, $this->queryOptions);
} catch (\Exception $e) {
$this->connection
->exceptionHandler()
->handleExecutionException($e, $stmt, [], $this->queryOptions);
}
}
return $this->connection
->lastInsertId();
}