collection = $collection; $this->prefix = $prefix; $this->cacher = $cacher; } /** * @inheritDoc */ public function listTablesWithoutViews(): array { return $this->collection->listTablesWithoutViews(); } /** * @inheritDoc */ public function listTables(): array { return $this->collection->listTables(); } /** * @inheritDoc */ public function describe(string $name, array $options = []): TableSchemaInterface { $options += ['forceRefresh' => false]; $cacheKey = $this->cacheKey($name); if (!$options['forceRefresh']) { $cached = $this->cacher->get($cacheKey); if ($cached !== null) { return $cached; } } $table = $this->collection->describe($name, $options); $this->cacher->set($cacheKey, $table); return $table; } /** * Get the cache key for a given name. * * @param string $name The name to get a cache key for. * @return string The cache key. */ public function cacheKey(string $name): string { return $this->prefix . '_' . $name; } /** * Set a cacher. * * @param \Psr\SimpleCache\CacheInterface $cacher Cacher object * @return $this */ public function setCacher(CacheInterface $cacher) { $this->cacher = $cacher; return $this; } /** * Get a cacher. * * @return \Psr\SimpleCache\CacheInterface $cacher Cacher object */ public function getCacher(): CacheInterface { return $this->cacher; } }