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
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 */
22 /** @throws InvalidTableName */
23 private function __construct(mixed $name)
26 Assert
::stringNotEmpty($name);
27 } catch (InvalidArgumentException
) {
28 throw InvalidTableName
::fromEmptyName();
32 Assert
::maxLength($name, self
::MAX_LENGTH
);
33 } catch (InvalidArgumentException
) {
34 throw InvalidTableName
::fromLongName(self
::MAX_LENGTH
);
38 Assert
::notEndsWith($name, ' ');
39 } catch (InvalidArgumentException
) {
40 throw InvalidTableName
::fromNameWithTrailingSpace();
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
59 return new self($name);
60 } catch (InvalidTableName
) {
65 /** @psalm-return non-empty-string */
66 public function getName(): string
71 /** @psalm-return non-empty-string */
72 public function __toString(): string