Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 8 |
CRAP | |
0.00% |
0 / 54 |
| DatabaseStorageExpirable | |
0.00% |
0 / 1 |
|
0.00% |
0 / 8 |
90 | |
0.00% |
0 / 54 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| has | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 6 |
|||
| getMultiple | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 9 |
|||
| getAll | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 8 |
|||
| setWithExpire | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 11 |
|||
| setWithExpireIfNotExists | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 12 |
|||
| setMultipleWithExpire | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 4 |
|||
| deleteMultiple | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\Core\KeyValueStore\DatabaseStorageExpirable. | |
| */ | |
| namespace Drupal\Core\KeyValueStore; | |
| use Drupal\Component\Serialization\SerializationInterface; | |
| use Drupal\Core\Database\Connection; | |
| use Drupal\Core\Database\Query\Merge; | |
| /** | |
| * Defines a default key/value store implementation for expiring items. | |
| * | |
| * This key/value store implementation uses the database to store key/value | |
| * data with an expire date. | |
| */ | |
| class DatabaseStorageExpirable extends DatabaseStorage implements KeyValueStoreExpirableInterface { | |
| /** | |
| * Overrides Drupal\Core\KeyValueStore\StorageBase::__construct(). | |
| * | |
| * @param string $collection | |
| * The name of the collection holding key and value pairs. | |
| * @param \Drupal\Component\Serialization\SerializationInterface $serializer | |
| * The serialization class to use. | |
| * @param \Drupal\Core\Database\Connection $connection | |
| * The database connection to use. | |
| * @param string $table | |
| * The name of the SQL table to use, defaults to key_value_expire. | |
| */ | |
| public function __construct($collection, SerializationInterface $serializer, Connection $connection, $table = 'key_value_expire') { | |
| parent::__construct($collection, $serializer, $connection, $table); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function has($key) { | |
| return (bool) $this->connection->query('SELECT 1 FROM {' . $this->connection->escapeTable($this->table) . '} WHERE collection = :collection AND name = :key AND expire > :now', array( | |
| ':collection' => $this->collection, | |
| ':key' => $key, | |
| ':now' => REQUEST_TIME, | |
| ))->fetchField(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getMultiple(array $keys) { | |
| $values = $this->connection->query( | |
| 'SELECT name, value FROM {' . $this->connection->escapeTable($this->table) . '} WHERE expire > :now AND name IN ( :keys[] ) AND collection = :collection', | |
| array( | |
| ':now' => REQUEST_TIME, | |
| ':keys[]' => $keys, | |
| ':collection' => $this->collection, | |
| ))->fetchAllKeyed(); | |
| return array_map(array($this->serializer, 'decode'), $values); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getAll() { | |
| $values = $this->connection->query( | |
| 'SELECT name, value FROM {' . $this->connection->escapeTable($this->table) . '} WHERE collection = :collection AND expire > :now', | |
| array( | |
| ':collection' => $this->collection, | |
| ':now' => REQUEST_TIME | |
| ))->fetchAllKeyed(); | |
| return array_map(array($this->serializer, 'decode'), $values); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| function setWithExpire($key, $value, $expire) { | |
| $this->connection->merge($this->table) | |
| ->keys(array( | |
| 'name' => $key, | |
| 'collection' => $this->collection, | |
| )) | |
| ->fields(array( | |
| 'value' => $this->serializer->encode($value), | |
| 'expire' => REQUEST_TIME + $expire, | |
| )) | |
| ->execute(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| function setWithExpireIfNotExists($key, $value, $expire) { | |
| $result = $this->connection->merge($this->table) | |
| ->insertFields(array( | |
| 'collection' => $this->collection, | |
| 'name' => $key, | |
| 'value' => $this->serializer->encode($value), | |
| 'expire' => REQUEST_TIME + $expire, | |
| )) | |
| ->condition('collection', $this->collection) | |
| ->condition('name', $key) | |
| ->execute(); | |
| return $result == Merge::STATUS_INSERT; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| function setMultipleWithExpire(array $data, $expire) { | |
| foreach ($data as $key => $value) { | |
| $this->setWithExpire($key, $value, $expire); | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function deleteMultiple(array $keys) { | |
| parent::deleteMultiple($keys); | |
| } | |
| } |