Initial xentral_oss_20.3.c9ffacf
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Xentral\Components\SchemaCreator;
|
||||
|
||||
use InvalidArgumentException;
|
||||
|
||||
final class DatabaseVersionStringParser
|
||||
{
|
||||
|
||||
/** @var string */
|
||||
private const MYSQL_DB_TYPE = 'mysql';
|
||||
|
||||
/** @var string */
|
||||
private const MARIA_DB_TYPE = 'mariadb';
|
||||
|
||||
/** @var string $db */
|
||||
private $stringVersion;
|
||||
|
||||
/**
|
||||
* @param string $stringVersion
|
||||
*/
|
||||
public function __construct(string $stringVersion)
|
||||
{
|
||||
if (empty($stringVersion)) {
|
||||
throw new InvalidArgumentException('String version cannot be Empty');
|
||||
}
|
||||
$this->stringVersion = strtolower($stringVersion);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $driver
|
||||
*
|
||||
* @throw InvalidArgumentException
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isDriver(string $driver): bool
|
||||
{
|
||||
if ($driver !== self::MARIA_DB_TYPE && strripos($this->stringVersion, 'maria') !== false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($driver === self::MARIA_DB_TYPE) {
|
||||
return strripos($this->stringVersion, 'maria') !== false;
|
||||
}
|
||||
|
||||
if ($driver !== self::MYSQL_DB_TYPE) {
|
||||
throw new InvalidArgumentException(sprintf('%s is currently not supported', $driver));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getDriverVersion(): string
|
||||
{
|
||||
$version = $this->isDriver(self::MARIA_DB_TYPE) ? substr($this->stringVersion, 0, 4) : substr(
|
||||
$this->stringVersion,
|
||||
0,
|
||||
3
|
||||
);
|
||||
|
||||
if (empty($version) || !is_numeric($version[0])) {
|
||||
throw new InvalidArgumentException('Unknown Database Driver Version');
|
||||
}
|
||||
|
||||
return $version;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user