Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
20 / 20
100.00% covered (success)
100.00%
12 / 12
66.67% covered (warning)
66.67%
6 / 9
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
MetadataTable
100.00% covered (success)
100.00%
20 / 20
100.00% covered (success)
100.00%
12 / 12
66.67% covered (warning)
66.67%
6 / 9
100.00% covered (success)
100.00%
2 / 2
8.81
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 create
100.00% covered (success)
100.00%
19 / 19
100.00% covered (success)
100.00%
11 / 11
62.50% covered (warning)
62.50%
5 / 8
100.00% covered (success)
100.00%
1 / 1
7.90
1<?php
2
3declare(strict_types=1);
4
5namespace Celema\Quma\Migrations;
6
7use Celema\Console\Io;
8use Celema\Quma\Database;
9use Celema\Quma\Environment;
10use Throwable;
11
12final readonly class MetadataTable
13{
14    public function __construct(
15        private Environment $env,
16        private Io $io,
17    ) {}
18
19    public function create(Database $db): int
20    {
21        $env = $this->env;
22        $io = $this->io;
23        $driver = $db->getPdoDriver();
24        $ddl = $env->getMigrationsTableDDL();
25
26        if ($ddl === false || !new DriverPolicy($driver)->isKnown()) {
27            $io->error("PDO driver '%s' not supported. Aborting", $driver);
28
29            return 1;
30        }
31
32        if ($env->checkIfMigrationsTableExists($db)) {
33            $io->error("Table '%s' already exists. Aborting", $env->table);
34
35            return 1;
36        }
37
38        try {
39            $db->execute($ddl)->run();
40            $io->line("<bright-green>Success</bright-green>: Created table '%s'", $env->table);
41
42            return 0;
43        } catch (Throwable $e) {
44            $io->error("Error: While trying to create table '%s'", $env->table);
45            $io->stderr()->line('%s', $e->getMessage());
46
47            if ($env->showStacktrace) {
48                $io->stderr()->line('%s', $e->getTraceAsString());
49            }
50
51            return 1;
52        }
53    }
54}