Translated using Weblate (Portuguese)
[phpmyadmin.git] / src / Identifiers / TableName.php
blob5137a0214cfafed2f6bc443dd92e43b66868a05d
1 <?php
3 declare(strict_types=1);
5 namespace PhpMyAdmin\Identifiers;
7 use Webmozart\Assert\Assert;
8 use Webmozart\Assert\InvalidArgumentException;
10 /** @psalm-immutable */
11 final class TableName implements Identifier
13 /**
14 * @see https://dev.mysql.com/doc/refman/en/identifier-length.html
15 * @see https://mariadb.com/kb/en/identifier-names/#maximum-length
17 private const MAX_LENGTH = 64;
19 /** @psalm-var non-empty-string */
20 private string $name;
22 /** @throws InvalidTableName */
23 private function __construct(mixed $name)
25 try {
26 Assert::stringNotEmpty($name);
27 } catch (InvalidArgumentException) {
28 throw InvalidTableName::fromEmptyName();
31 try {
32 Assert::maxLength($name, self::MAX_LENGTH);
33 } catch (InvalidArgumentException) {
34 throw InvalidTableName::fromLongName(self::MAX_LENGTH);
37 try {
38 Assert::notEndsWith($name, ' ');
39 } catch (InvalidArgumentException) {
40 throw InvalidTableName::fromNameWithTrailingSpace();
43 $this->name = $name;
46 /**
47 * @throws InvalidTableName
49 * @psalm-assert non-empty-string $name
51 public static function from(mixed $name): static
53 return new self($name);
56 public static function tryFrom(mixed $name): static|null
58 try {
59 return new self($name);
60 } catch (InvalidTableName) {
61 return null;
65 /** @psalm-return non-empty-string */
66 public function getName(): string
68 return $this->name;
71 /** @psalm-return non-empty-string */
72 public function __toString(): string
74 return $this->name;