. */ declare(strict_types=1); namespace Fisharebest\Webtrees; use Illuminate\Database\Capsule\Manager; use Illuminate\Database\Query\Builder; use PDO; use RuntimeException; /** * Database abstraction */ class DB extends Manager { public static function driverName(): string { return parent::connection()->getPdo()->getAttribute(PDO::ATTR_DRIVER_NAME); } public static function prefix(string $identifier = ''): string { return parent::connection()->getTablePrefix() . $identifier; } /** * @internal */ public static function caseInsensitiveLikeOperator(): string { if (self::driverName() === 'pgsql') { return 'ILIKE'; } if (self::driverName() === 'sqlsrv') { return 'COLLATE SQL_UTF8_General_CI_AI LIKE'; } return 'LIKE'; } /** * @internal */ public static function groupConcat(string $column): string { switch (self::driverName()) { case 'pgsql': case 'sqlsrv': return 'STRING_AGG(' . $column . ", ',')"; case 'mysql': case 'sqlite': default: return 'GROUP_CONCAT(' . $column . ')'; } } public static function lastInsertId(): int { $return = parent::connection()->getPdo()->lastInsertId(); if ($return === false) { throw new RuntimeException('Unable to retrieve last insert ID'); } // All IDs are integers in our schema. return (int) $return; } /** * PHPSTAN can't detect the magic methods in the parent class. */ public static function query(): Builder { return parent::connection()->query(); } }