You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
1.2 KiB
66 lines
1.2 KiB
<?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; |
|
} |
|
}
|
|
|