1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
15: namespace Cake\Shell;
16:
17: use Cake\Console\Shell;
18: use Cake\Database\SchemaCache;
19: use Cake\Datasource\ConnectionManager;
20: use RuntimeException;
21:
22: 23: 24: 25: 26: 27: 28: 29: 30:
31: class SchemaCacheShell extends Shell
32: {
33: 34: 35: 36: 37: 38:
39: public function build($name = null)
40: {
41: $cache = $this->_getSchemaCache();
42: $tables = $cache->build($name);
43:
44: foreach ($tables as $table) {
45: $this->verbose(sprintf('Cached "%s"', $table));
46: }
47:
48: $this->out('<success>Cache build complete</success>');
49:
50: return true;
51: }
52:
53: 54: 55: 56: 57: 58:
59: public function clear($name = null)
60: {
61: $cache = $this->_getSchemaCache();
62: $tables = $cache->clear($name);
63:
64: foreach ($tables as $table) {
65: $this->verbose(sprintf('Cleared "%s"', $table));
66: }
67:
68: $this->out('<success>Cache clear complete</success>');
69:
70: return true;
71: }
72:
73: 74: 75: 76: 77:
78: protected function _getSchemaCache()
79: {
80: try {
81: $connection = ConnectionManager::get($this->params['connection']);
82:
83: return new SchemaCache($connection);
84: } catch (RuntimeException $e) {
85: $this->abort($e->getMessage());
86: }
87: }
88:
89: 90: 91: 92: 93:
94: public function getOptionParser()
95: {
96: $parser = parent::getOptionParser();
97: $parser->addSubcommand('clear', [
98: 'help' => 'Clear all metadata caches for the connection. If a ' .
99: 'table name is provided, only that table will be removed.',
100: ])->addSubcommand('build', [
101: 'help' => 'Build all metadata caches for the connection. If a ' .
102: 'table name is provided, only that table will be cached.',
103: ])->addOption('connection', [
104: 'help' => 'The connection to build/clear metadata cache data for.',
105: 'short' => 'c',
106: 'default' => 'default',
107: ])->addArgument('name', [
108: 'help' => 'A specific table you want to clear/refresh cached data for.',
109: 'optional' => true,
110: ]);
111:
112: return $parser;
113: }
114: }
115: