diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/MetadataCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/MetadataCommand.php index 0bb318995..ef7b02e3c 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/MetadataCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/MetadataCommand.php @@ -1,7 +1,5 @@ * @author Guilherme Blanco * @author Jonathan Wage @@ -47,9 +44,30 @@ class MetadataCommand extends Console\Command\Command $this ->setName('orm:clear-cache:metadata') ->setDescription('Clear all metadata cache of the various cache drivers.') - ->setDefinition(array()) - ->setHelp(<<setDefinition(array( + new InputOption( + 'flush', null, InputOption::VALUE_NONE, + 'If defined, cache entries will be flushed instead of deleted/invalidated.' + ) + )); + + $fullName = $this->getName(); + $this->setHelp(<<$fullName command is meant to clear the metadata cache of associated Entity Manager. +It is possible to invalidate all cache entries at once - called delete -, or flushes the cache provider +instance completely. + +The execution type differ on how you execute the command. +If you want to invalidate the entries (and not delete from cache instance), this command would do the work: + +$fullName + +Alternatively, if you want to flush the cache provider using this command: + +$fullName --flush + +Finally, be aware that if --flush option is passed, not all cache providers are able to flush entries, +because of a limitation of its execution nature. EOT ); } @@ -66,20 +84,16 @@ EOT throw new \InvalidArgumentException('No Metadata cache driver is configured on given EntityManager.'); } - if ($cacheDriver instanceof \Doctrine\Common\Cache\ApcCache) { - throw new \LogicException("Cannot clear APC Cache from Console, its shared in the Webserver memory and not accessible from the CLI."); - } - $output->write('Clearing ALL Metadata cache entries' . PHP_EOL); - $cacheIds = $cacheDriver->deleteAll(); - - if ($cacheIds) { - foreach ($cacheIds as $cacheId) { - $output->write(' - ' . $cacheId . PHP_EOL); - } - } else { - $output->write('No entries to be deleted.' . PHP_EOL); + $result = $cacheDriver->deleteAll(); + $message = ($result) ? 'Successfully deleted cache entries.' : 'No cache entries were deleted.'; + + if (true === $input->getOption('flush')) { + $result = $cacheDriver->flushAll(); + $message = ($result) ? 'Successfully flushed cache entries.' : $message; } + + $output->write($message . PHP_EOL); } } diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryCommand.php index 9b7129208..becb78a90 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/QueryCommand.php @@ -1,7 +1,5 @@ * @author Guilherme Blanco * @author Jonathan Wage @@ -47,9 +44,30 @@ class QueryCommand extends Console\Command\Command $this ->setName('orm:clear-cache:query') ->setDescription('Clear all query cache of the various cache drivers.') - ->setDefinition(array()) - ->setHelp(<<setDefinition(array( + new InputOption( + 'flush', null, InputOption::VALUE_NONE, + 'If defined, cache entries will be flushed instead of deleted/invalidated.' + ) + )); + + $fullName = $this->getName(); + $this->setHelp(<<$fullName command is meant to clear the query cache of associated Entity Manager. +It is possible to invalidate all cache entries at once - called delete -, or flushes the cache provider +instance completely. + +The execution type differ on how you execute the command. +If you want to invalidate the entries (and not delete from cache instance), this command would do the work: + +$fullName + +Alternatively, if you want to flush the cache provider using this command: + +$fullName --flush + +Finally, be aware that if --flush option is passed, not all cache providers are able to flush entries, +because of a limitation of its execution nature. EOT ); } @@ -66,20 +84,16 @@ EOT throw new \InvalidArgumentException('No Query cache driver is configured on given EntityManager.'); } - if ($cacheDriver instanceof \Doctrine\Common\Cache\ApcCache) { - throw new \LogicException("Cannot clear APC Cache from Console, its shared in the Webserver memory and not accessible from the CLI."); - } - $output->write('Clearing ALL Query cache entries' . PHP_EOL); - $cacheIds = $cacheDriver->deleteAll(); - - if ($cacheIds) { - foreach ($cacheIds as $cacheId) { - $output->write(' - ' . $cacheId . PHP_EOL); - } - } else { - $output->write('No entries to be deleted.' . PHP_EOL); + $result = $cacheDriver->deleteAll(); + $message = ($result) ? 'Successfully deleted cache entries.' : 'No cache entries were deleted.'; + + if (true === $input->getOption('flush')) { + $result = $cacheDriver->flushAll(); + $message = ($result) ? 'Successfully flushed cache entries.' : $message; } + + $output->write($message . PHP_EOL); } } diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/ResultCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/ResultCommand.php index f1506809b..45c66a949 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/ResultCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ClearCache/ResultCommand.php @@ -1,7 +1,5 @@ * @author Guilherme Blanco * @author Jonathan Wage @@ -45,29 +42,32 @@ class ResultCommand extends Console\Command\Command protected function configure() { $this - ->setName('orm:clear-cache:result') - ->setDescription('Clear result cache of the various cache drivers.') + ->setName('orm:clear-cache:query') + ->setDescription('Clear all result cache of the various cache drivers.') ->setDefinition(array( new InputOption( - 'id', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, - 'ID(s) of the cache entry to delete (accepts * wildcards).', array() - ), - new InputOption( - 'regex', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, - 'Delete cache entries that match the given regular expression(s).', array() - ), - new InputOption( - 'prefix', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, - 'Delete cache entries that have the given prefix(es).', array() - ), - new InputOption( - 'suffix', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, - 'Delete cache entries that have the given suffix(es).', array() - ), - )) - ->setHelp(<<getName(); + $this->setHelp(<<$fullName command is meant to clear the result cache of associated Entity Manager. +It is possible to invalidate all cache entries at once - called delete -, or flushes the cache provider +instance completely. + +The execution type differ on how you execute the command. +If you want to invalidate the entries (and not delete from cache instance), this command would do the work: + +$fullName + +Alternatively, if you want to flush the cache provider using this command: + +$fullName --flush + +Finally, be aware that if --flush option is passed, not all cache providers are able to flush entries, +because of a limitation of its execution nature. EOT ); } @@ -78,91 +78,22 @@ EOT protected function execute(Console\Input\InputInterface $input, Console\Output\OutputInterface $output) { $em = $this->getHelper('em')->getEntityManager(); - $cacheDriver = $em->getConfiguration()->getResultCacheImpl(); + $cacheDriver = $em->getConfiguration()->getQueryCacheImpl(); if ( ! $cacheDriver) { throw new \InvalidArgumentException('No Result cache driver is configured on given EntityManager.'); } - if ($cacheDriver instanceof \Doctrine\Common\Cache\ApcCache) { - throw new \LogicException("Cannot clear APC Cache from Console, its shared in the Webserver memory and not accessible from the CLI."); - } - - $outputed = false; - - // Removing based on --id - if (($ids = $input->getOption('id')) !== null && $ids) { - foreach ($ids as $id) { - $output->write($outputed ? PHP_EOL : ''); - $output->write(sprintf('Clearing Result cache entries that match the id "%s"', $id) . PHP_EOL); - - $deleted = $cacheDriver->delete($id); - - if (is_array($deleted)) { - $this->_printDeleted($output, $deleted); - } else if (is_bool($deleted) && $deleted) { - $this->_printDeleted($output, array($id)); - } - - $outputed = true; - } - } - - // Removing based on --regex - if (($regexps = $input->getOption('regex')) !== null && $regexps) { - foreach($regexps as $regex) { - $output->write($outputed ? PHP_EOL : ''); - $output->write(sprintf('Clearing Result cache entries that match the regular expression "%s"', $regex) . PHP_EOL); - - $this->_printDeleted($output, $cacheDriver->deleteByRegex('/' . $regex. '/')); - - $outputed = true; - } - } - - // Removing based on --prefix - if (($prefixes = $input->getOption('prefix')) !== null & $prefixes) { - foreach ($prefixes as $prefix) { - $output->write($outputed ? PHP_EOL : ''); - $output->write(sprintf('Clearing Result cache entries that have the prefix "%s"', $prefix) . PHP_EOL); - - $this->_printDeleted($output, $cacheDriver->deleteByPrefix($prefix)); - - $outputed = true; - } - } - - // Removing based on --suffix - if (($suffixes = $input->getOption('suffix')) !== null && $suffixes) { - foreach ($suffixes as $suffix) { - $output->write($outputed ? PHP_EOL : ''); - $output->write(sprintf('Clearing Result cache entries that have the suffix "%s"', $suffix) . PHP_EOL); - - $this->_printDeleted($output, $cacheDriver->deleteBySuffix($suffix)); - - $outputed = true; - } - } - - // Removing ALL entries - if ( ! $ids && ! $regexps && ! $prefixes && ! $suffixes) { - $output->write($outputed ? PHP_EOL : ''); - $output->write('Clearing ALL Result cache entries' . PHP_EOL); - - $this->_printDeleted($output, $cacheDriver->deleteAll()); - - $outputed = true; + $output->write('Clearing ALL Query cache entries' . PHP_EOL); + + $result = $cacheDriver->deleteAll(); + $message = ($result) ? 'Successfully deleted cache entries.' : 'No cache entries were deleted.'; + + if (true === $input->getOption('flush')) { + $result = $cacheDriver->flushAll(); + $message = ($result) ? 'Successfully flushed cache entries.' : $message; } + + $output->write($message . PHP_EOL); } - - private function _printDeleted(Console\Output\OutputInterface $output, array $items) - { - if ($items) { - foreach ($items as $item) { - $output->write(' - ' . $item . PHP_EOL); - } - } else { - $output->write('No entries to be deleted.' . PHP_EOL); - } - } -} +} \ No newline at end of file