| Code Coverage | ||||||||||
| Classes and Traits | Functions and Methods | Lines | ||||||||
| Total |  | 0.00% | 0 / 1 |  | 0.00% | 0 / 1 | CRAP |  | 0.00% | 0 / 55 | 
| Update |  | 0.00% | 0 / 1 |  | 0.00% | 0 / 1 | 132 |  | 0.00% | 0 / 55 | 
| execute |  | 0.00% | 0 / 1 | 132 |  | 0.00% | 0 / 55 | |||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\Core\Database\Driver\pgsql\Update. | |
| */ | |
| namespace Drupal\Core\Database\Driver\pgsql; | |
| use Drupal\Core\Database\Database; | |
| use Drupal\Core\Database\Query\Update as QueryUpdate; | |
| use Drupal\Core\Database\Query\SelectInterface; | |
| /** | |
| * PostgreSQL implementation of \Drupal\Core\Database\Query\Update. | |
| */ | |
| class Update extends QueryUpdate { | |
| public function execute() { | |
| $max_placeholder = 0; | |
| $blobs = array(); | |
| $blob_count = 0; | |
| // Because we filter $fields the same way here and in __toString(), the | |
| // placeholders will all match up properly. | |
| $stmt = $this->connection->prepareQuery((string) $this); | |
| // Fetch the list of blobs and sequences used on that table. | |
| $table_information = $this->connection->schema()->queryTableInformation($this->table); | |
| // Expressions take priority over literal fields, so we process those first | |
| // and remove any literal fields that conflict. | |
| $fields = $this->fields; | |
| foreach ($this->expressionFields as $field => $data) { | |
| if (!empty($data['arguments'])) { | |
| foreach ($data['arguments'] as $placeholder => $argument) { | |
| // We assume that an expression will never happen on a BLOB field, | |
| // which is a fairly safe assumption to make since in most cases | |
| // it would be an invalid query anyway. | |
| $stmt->bindParam($placeholder, $data['arguments'][$placeholder]); | |
| } | |
| } | |
| if ($data['expression'] instanceof SelectInterface) { | |
| $data['expression']->compile($this->connection, $this); | |
| $select_query_arguments = $data['expression']->arguments(); | |
| foreach ($select_query_arguments as $placeholder => $argument) { | |
| $stmt->bindParam($placeholder, $select_query_arguments[$placeholder]); | |
| } | |
| } | |
| unset($fields[$field]); | |
| } | |
| foreach ($fields as $field => $value) { | |
| $placeholder = ':db_update_placeholder_' . ($max_placeholder++); | |
| if (isset($table_information->blob_fields[$field])) { | |
| $blobs[$blob_count] = fopen('php://memory', 'a'); | |
| fwrite($blobs[$blob_count], $value); | |
| rewind($blobs[$blob_count]); | |
| $stmt->bindParam($placeholder, $blobs[$blob_count], \PDO::PARAM_LOB); | |
| ++$blob_count; | |
| } | |
| else { | |
| $stmt->bindParam($placeholder, $fields[$field]); | |
| } | |
| } | |
| if (count($this->condition)) { | |
| $this->condition->compile($this->connection, $this); | |
| $arguments = $this->condition->arguments(); | |
| foreach ($arguments as $placeholder => $value) { | |
| $stmt->bindParam($placeholder, $arguments[$placeholder]); | |
| } | |
| } | |
| $options = $this->queryOptions; | |
| $options['already_prepared'] = TRUE; | |
| $options['return'] = Database::RETURN_AFFECTED; | |
| $this->connection->addSavepoint(); | |
| try { | |
| $result = $this->connection->query($stmt, array(), $options); | |
| $this->connection->releaseSavepoint(); | |
| return $result; | |
| } | |
| catch (\Exception $e) { | |
| $this->connection->rollbackSavepoint(); | |
| throw $e; | |
| } | |
| } | |
| } |