Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
78.57% covered (warning)
78.57%
11 / 14
40.00% covered (danger)
40.00%
2 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
SchemaMapper
78.57% covered (warning)
78.57%
11 / 14
40.00% covered (danger)
40.00%
2 / 5
8.63
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getTables
87.50% covered (warning)
87.50%
7 / 8
0.00% covered (danger)
0.00%
0 / 1
3.02
 getTable
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getFields
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 getField
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2/**
3 * Jingga
4 *
5 * PHP Version 8.1
6 *
7 * @package   phpOMS\DataStorage\Database
8 * @copyright Dennis Eichhorn
9 * @license   OMS License 2.0
10 * @version   1.0.0
11 * @link      https://jingga.app
12 */
13declare(strict_types=1);
14
15namespace phpOMS\DataStorage\Database;
16
17use phpOMS\DataStorage\Database\Connection\ConnectionAbstract;
18use phpOMS\DataStorage\Database\Schema\Builder;
19use phpOMS\DataStorage\Database\Schema\Field;
20use phpOMS\DataStorage\Database\Schema\Table;
21
22/**
23 * Database schema mapper.
24 *
25 * @package phpOMS\DataStorage\Database
26 * @license OMS License 2.0
27 * @link    https://jingga.app
28 * @since   1.0.0
29 */
30class SchemaMapper
31{
32    /**
33     * Database connection.
34     *
35     * @var ConnectionAbstract
36     * @since 1.0.0
37     */
38    protected ConnectionAbstract $db;
39
40    /**
41     * Constructor.
42     *
43     * @param ConnectionAbstract $db Database connection
44     *
45     * @since 1.0.0
46     */
47    public function __construct(ConnectionAbstract $db)
48    {
49        $this->db = $db;
50    }
51
52    /**
53     * Get all tables of database
54     *
55     * @return array
56     *
57     * @since 1.0.0
58     */
59    public function getTables() : array
60    {
61        $tables  = [];
62        $builder = new Builder($this->db);
63
64        /** @var array<int, string[]> $tNames */
65        $tNames = $builder->selectTables()->execute()?->fetchAll(\PDO::FETCH_ASSOC);
66
67        if ($tNames === null) {
68            return $tables;
69        }
70
71        foreach ($tNames as $name) {
72            $tables[] = \array_values($name)[0];
73        }
74
75        return $tables;
76    }
77
78    /**
79     * Get table by name
80     *
81     * @param string $name Name of the table
82     *
83     * @return Table
84     *
85     * @since 1.0.0
86     */
87    public function getTable(string $name) : Table
88    {
89        return new Table();
90    }
91
92    /**
93     * Get fields of table
94     *
95     * @param string $table Name of the table
96     *
97     * @return array
98     *
99     * @since 1.0.0
100     */
101    public function getFields(string $table) : array
102    {
103        $builder = new Builder($this->db);
104        $fields  = $builder->selectFields($table)->execute()?->fetchAll(\PDO::FETCH_ASSOC);
105
106        return $fields === null ? [] : $fields;
107    }
108
109    /**
110     * Get field of table
111     *
112     * @param string $table Name of the table
113     * @param string $name  Name of the field
114     *
115     * @return Field
116     *
117     * @since 1.0.0
118     */
119    public function getField(string $table, string $name) : Field
120    {
121        return new Field();
122    }
123}