Ejemplo n.º 1
0
 public function getArguments(QueryPlaceholderInterface $queryPlaceholder = NULL)
 {
     return $this->query->getArguments($queryPlaceholder);
 }
Ejemplo n.º 2
0
 /**
  * Executes the insert query.
  *
  * @return
  *   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 makes it safe to use in multi-insert loops.
  */
 public function execute()
 {
     // If validation fails, simply return NULL. Note that validation routines
     // in preExecute() may throw exceptions instead.
     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)) {
         $sql = (string) $this;
         // The SelectQuery may contain arguments, load and pass them through.
         return $this->connection->query($sql, $this->fromQuery->getArguments(), $this->queryOptions);
     }
     $last_insert_id = 0;
     // Each insert happens in its own query in the degenerate case. However,
     // we wrap it in a transaction so that it is atomic where possible. On many
     // databases, such as SQLite, this is also a notable performance boost.
     $transaction = $this->connection->startTransaction();
     try {
         $sql = (string) $this;
         foreach ($this->insertValues as $insert_values) {
             $last_insert_id = $this->connection->query($sql, $insert_values, $this->queryOptions);
         }
     } catch (Exception $e) {
         // One of the INSERTs failed, rollback the whole batch.
         $transaction->rollback();
         // Rethrow the exception for the calling code.
         throw $e;
     }
     // Re-initialize the values array so that we can re-use this query.
     $this->insertValues = array();
     // Transaction commits here where $transaction looses scope.
     return $last_insert_id;
 }