'ki_dev', 'content' => 'ki_content', ]; /** @var array */ private static array $connections = []; /** * Gets the 'dev' database connection (ki_dev). * * Contains: dokumentation, dokumentation_chunks, tasks, contracts, protokoll */ public static function dev(): PDO { return self::getConnection('dev'); } /** * Gets the 'content' database connection (ki_content). * * Contains: content studio data, semantic entities, relations */ public static function content(): PDO { return self::getConnection('content'); } /** * Gets a connection by name. * * @param string $name Connection name ('dev' or 'content') */ public static function getConnection(string $name): PDO { if (!isset(self::DATABASES[$name])) { throw new RuntimeException("Unknown database connection: {$name}"); } if (!isset(self::$connections[$name])) { self::$connections[$name] = self::createConnection(self::DATABASES[$name]); } return self::$connections[$name]; } /** * Closes all connections and clears the cache. */ public static function closeAll(): void { self::$connections = []; } /** * Creates a new PDO connection. */ private static function createConnection(string $database): PDO { $password = CredentialService::getMariaDbPassword(); return new PDO( "mysql:host=localhost;dbname={$database};charset=utf8mb4", 'root', $password, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ] ); } }