Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
42.86% |
3 / 7 |
CRAP | |
87.88% |
29 / 33 |
| MySQLDatabase | |
0.00% |
0 / 1 |
|
42.86% |
3 / 7 |
14.35 | |
87.88% |
29 / 33 |
| __construct | |
0.00% |
0 / 1 |
2.02 | |
83.33% |
5 / 6 |
|||
| refresh | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
| getTableList | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| getTableByName | |
0.00% |
0 / 1 |
3.14 | |
75.00% |
3 / 4 |
|||
| readMySQLTable | |
0.00% |
0 / 1 |
3.04 | |
83.33% |
5 / 6 |
|||
| getTableDTO | |
100.00% |
1 / 1 |
2 | |
100.00% |
7 / 7 |
|||
| getStoredProcedureList | |
0.00% |
0 / 1 |
2.02 | |
83.33% |
5 / 6 |
|||
| <?php | |
| declare(strict_types = 1); | |
| namespace Siesta\Driver\MySQL\MetaData; | |
| use Siesta\Database\Connection; | |
| use Siesta\Database\CreateStatementFactory; | |
| use Siesta\Database\MetaData\DatabaseMetaData; | |
| use Siesta\Database\MetaData\TableMetaData; | |
| /** | |
| * @author Gregor Müller | |
| */ | |
| class MySQLDatabase implements DatabaseMetaData | |
| { | |
| const SQL_GET_SP_LIST = "SELECT ROUTINE_NAME FROM information_schema.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_SCHEMA = '%s';"; | |
| const SQL_GET_TABLE_LIST = "SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA='%s';"; | |
| const ROUTINE_NAME = "ROUTINE_NAME"; | |
| /** | |
| * @var Connection | |
| */ | |
| protected $connection; | |
| /** | |
| * @var MySQLTable[] | |
| */ | |
| protected $tableList; | |
| /** | |
| * MySQLDatabase constructor. | |
| * | |
| * @param Connection $connection | |
| * @param string|null $databaseName | |
| */ | |
| public function __construct(Connection $connection, string $databaseName = null) | |
| { | |
| $this->connection = $connection; | |
| $this->tableList = []; | |
| if ($databaseName !== null) { | |
| $this->connection->useDatabase($databaseName); | |
| } | |
| $this->readMySQLTable(); | |
| } | |
| /** | |
| * | |
| */ | |
| public function refresh() | |
| { | |
| $this->tableList = []; | |
| $this->readMySQLTable(); | |
| } | |
| /** | |
| * @return array | |
| */ | |
| public function getTableList() : array | |
| { | |
| return $this->tableList; | |
| } | |
| /** | |
| * @param string $tableName | |
| * | |
| * @return TableMetaData|null | |
| */ | |
| public function getTableByName(string $tableName) | |
| { | |
| foreach ($this->tableList as $table) { | |
| if ($table->getName() === $tableName) { | |
| return $table; | |
| } | |
| } | |
| return null; | |
| } | |
| /** | |
| * | |
| */ | |
| protected function readMySQLTable() | |
| { | |
| $tableDTOList = $this->getTableDTO(); | |
| foreach ($tableDTOList as $tableDTO) { | |
| // do not care about sequencer table | |
| if ($tableDTO->name === CreateStatementFactory::SEQUENCER_TABLE_NAME) { | |
| continue; | |
| } | |
| $this->tableList[] = new MySQLTable($this->connection, $tableDTO); | |
| } | |
| } | |
| /** | |
| * @return TableDTO[] | |
| */ | |
| protected function getTableDTO() : array | |
| { | |
| $tableDTOList = []; | |
| $sql = sprintf(self::SQL_GET_TABLE_LIST, $this->connection->getDatabase()); | |
| $resultSet = $this->connection->query($sql); | |
| while ($resultSet->hasNext()) { | |
| $tableDTOList[] = new TableDTO($resultSet); | |
| } | |
| $resultSet->close(); | |
| return $tableDTOList; | |
| } | |
| /** | |
| * @return string[] | |
| */ | |
| public function getStoredProcedureList() : array | |
| { | |
| $spNameList = []; | |
| $sql = sprintf(self::SQL_GET_SP_LIST, $this->connection->getDatabase()); | |
| $resultSet = $this->connection->query($sql); | |
| while ($resultSet->hasNext()) { | |
| $spNameList[] = $resultSet->getStringValue(self::ROUTINE_NAME); | |
| } | |
| return $spNameList; | |
| } | |
| } |