67 lines
1.2 KiB
PHP
67 lines
1.2 KiB
PHP
|
<?php
|
||
|
|
||
|
declare(strict_types=1);
|
||
|
|
||
|
namespace PhpMyAdmin\Dbal;
|
||
|
|
||
|
use Stringable;
|
||
|
use Webmozart\Assert\Assert;
|
||
|
use Webmozart\Assert\InvalidArgumentException;
|
||
|
|
||
|
/**
|
||
|
* @psalm-immutable
|
||
|
*/
|
||
|
final class TableName implements Stringable
|
||
|
{
|
||
|
/**
|
||
|
* @see https://dev.mysql.com/doc/refman/en/identifier-length.html
|
||
|
* @see https://mariadb.com/kb/en/identifier-names/#maximum-length
|
||
|
*/
|
||
|
private const MAX_LENGTH = 64;
|
||
|
|
||
|
/**
|
||
|
* @var string
|
||
|
* @psalm-var non-empty-string
|
||
|
*/
|
||
|
private $name;
|
||
|
|
||
|
/**
|
||
|
* @param mixed $name
|
||
|
*
|
||
|
* @throws InvalidArgumentException
|
||
|
*/
|
||
|
private function __construct($name)
|
||
|
{
|
||
|
Assert::stringNotEmpty($name);
|
||
|
Assert::maxLength($name, self::MAX_LENGTH);
|
||
|
Assert::notEndsWith($name, ' ');
|
||
|
$this->name = $name;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param mixed $name
|
||
|
*
|
||
|
* @throws InvalidArgumentException
|
||
|
*/
|
||
|
public static function fromValue($name): self
|
||
|
{
|
||
|
return new self($name);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @psalm-return non-empty-string
|
||
|
*/
|
||
|
public function getName(): string
|
||
|
{
|
||
|
return $this->name;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @psalm-return non-empty-string
|
||
|
*/
|
||
|
public function __toString(): string
|
||
|
{
|
||
|
return $this->name;
|
||
|
}
|
||
|
}
|