3 declare(strict_types
=1);
7 use function mb_strpos
;
8 use function mb_substr
;
10 final class ShowGrants
12 public readonly
string $grants;
13 public readonly
string $tableName;
14 public readonly
string $dbName;
15 private int $tableNameEndOffset;
16 private int $tableNameStartOffset;
17 private int $dbNameOffset;
19 public function __construct(string $showGrants)
21 $this->dbNameOffset
= (int) mb_strpos($showGrants, ' ON ') +
4;
22 $this->tableNameEndOffset
= (int) mb_strpos($showGrants, ' TO ');
23 $this->tableNameStartOffset
= $this->getTableNameStartOffset($showGrants);
24 $this->grants
= $this->getShowGrantsString($showGrants);
25 $this->tableName
= $this->getGrantsTableName($showGrants);
26 $this->dbName
= $this->getGrantsDbName($showGrants);
29 private function getTableNameStartOffset(string $showGrants): int
31 $tableNameStartOffset = mb_strpos($showGrants, '`.', $this->dbNameOffset
);
34 $tableNameStartOffset !== false
35 && $tableNameStartOffset !== 0
36 && $tableNameStartOffset < $this->tableNameEndOffset
38 return $tableNameStartOffset +
1;
41 return (int) mb_strpos($showGrants, '.', $this->dbNameOffset
);
44 private function getShowGrantsString(string $showGrants): string
46 return mb_substr($showGrants, 6, (int) mb_strpos($showGrants, ' ON ') - 6);
49 private function getGrantsTableName(string $showGrants): string
51 $showGrantsTableName = mb_substr(
53 $this->tableNameStartOffset +
1,
54 $this->tableNameEndOffset
- $this->tableNameStartOffset
- 1,
57 return Util
::unQuote($showGrantsTableName, '`');
60 private function getGrantsDbName(string $showGrants): string
62 $showGrantsDbName = mb_substr(
65 $this->tableNameStartOffset
- $this->dbNameOffset
,
68 return Util
::unQuote($showGrantsDbName, '`');