67 lines
2.2 KiB
PHP
67 lines
2.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace PhpMyAdmin\Triggers;
|
|
|
|
use PhpMyAdmin\Identifiers\TableName;
|
|
use PhpMyAdmin\Identifiers\TriggerName;
|
|
use PhpMyAdmin\Query\Generator as QueryGenerator;
|
|
use PhpMyAdmin\Util;
|
|
use Webmozart\Assert\Assert;
|
|
use Webmozart\Assert\InvalidArgumentException;
|
|
|
|
final class Trigger
|
|
{
|
|
public function __construct(
|
|
public readonly TriggerName $name,
|
|
public readonly Timing $timing,
|
|
public readonly Event $event,
|
|
public readonly TableName $table,
|
|
public readonly string $statement,
|
|
public readonly string $definer,
|
|
) {
|
|
}
|
|
|
|
/** @param mixed[] $trigger */
|
|
public static function tryFromArray(array $trigger): self|null
|
|
{
|
|
try {
|
|
$name = $trigger['Trigger'] ?? $trigger['TRIGGER_NAME'] ?? null;
|
|
$timing = $trigger['Timing'] ?? $trigger['ACTION_TIMING'] ?? null;
|
|
$event = $trigger['Event'] ?? $trigger['EVENT_MANIPULATION'] ?? null;
|
|
$table = $trigger['Table'] ?? $trigger['EVENT_OBJECT_TABLE'] ?? null;
|
|
$statement = $trigger['Statement'] ?? $trigger['ACTION_STATEMENT'] ?? null;
|
|
$definer = $trigger['Definer'] ?? $trigger['DEFINER'] ?? null;
|
|
Assert::string($name);
|
|
$name = TriggerName::tryFrom($name);
|
|
Assert::notNull($name);
|
|
Assert::string($timing);
|
|
$timing = Timing::tryFrom($timing);
|
|
Assert::notNull($timing);
|
|
Assert::string($event);
|
|
$event = Event::tryFrom($event);
|
|
Assert::notNull($event);
|
|
Assert::string($table);
|
|
$table = TableName::tryFrom($table);
|
|
Assert::notNull($table);
|
|
Assert::string($statement);
|
|
Assert::string($definer);
|
|
|
|
return new self($name, $timing, $event, $table, $statement, $definer);
|
|
} catch (InvalidArgumentException) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public function getDropSql(): string
|
|
{
|
|
return 'DROP TRIGGER IF EXISTS ' . Util::backquote($this->name);
|
|
}
|
|
|
|
public function getCreateSql(string $delimiter = '//'): string
|
|
{
|
|
return QueryGenerator::getCreateTrigger($this, $delimiter);
|
|
}
|
|
}
|