From 329935aa7f7879bf651e277baebf5ea8babed38e Mon Sep 17 00:00:00 2001 From: Chirag Aggarwal Date: Tue, 19 May 2026 19:23:56 +0530 Subject: [PATCH] Cache database factory adapters --- src/Appwrite/Database/DatabaseFactory.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/Appwrite/Database/DatabaseFactory.php b/src/Appwrite/Database/DatabaseFactory.php index f1e36c95f8..afe512ce65 100644 --- a/src/Appwrite/Database/DatabaseFactory.php +++ b/src/Appwrite/Database/DatabaseFactory.php @@ -16,6 +16,11 @@ use Utopia\System\System; class DatabaseFactory { + /** + * @var array + */ + protected array $adapters = []; + public function __construct( protected Group $pools, protected Cache $cache, @@ -30,7 +35,7 @@ class DatabaseFactory int $maxQueryValues = 0, array $metadata = [], ): Database { - $database = $this->newDatabase(new DatabasePool($this->pools->get('console'))); + $database = $this->newDatabase($this->adapter('console')); $database ->setDatabase($this->database) @@ -51,7 +56,7 @@ class DatabaseFactory ): Database { $dsn = $this->dsn($project->getAttribute('database')); $database = $this->newDatabase( - new DatabasePool($this->pools->get($dsn->getHost())), + $this->adapter($dsn->getHost()), $this->destinationFor($dsn) ); @@ -75,7 +80,7 @@ class DatabaseFactory $collections = Config::getParam('collections', []); $logsCollections = \array_keys($collections['logs'] ?? []); - $database = $this->newDatabase(new DatabasePool($this->pools->get('logs'))); + $database = $this->newDatabase($this->adapter('logs')); $database ->setDatabase($this->database) @@ -105,7 +110,7 @@ class DatabaseFactory $projectDsn = $this->dsn($project->getAttribute('database')); $databaseType = $databaseDocument->getAttribute('type', ''); - $database = $this->newDatabase(new DatabasePool($this->pools->get($databaseDsn->getHost()))); + $database = $this->newDatabase($this->adapter($databaseDsn->getHost())); $database ->setDatabase($this->database) @@ -163,6 +168,11 @@ class DatabaseFactory return new Database($adapter, $this->cache); } + protected function adapter(string $name): DatabasePool + { + return $this->adapters[$name] ??= new DatabasePool($this->pools->get($name)); + } + protected function configureDocumentTypes(Database $database): Database { return $database->setDocumentType('users', User::class);