Spaces:
No application file
No application file
| declare(strict_types=1); | |
| namespace Mautic\CoreBundle\Doctrine\GeneratedColumn; | |
| final class GeneratedColumn implements GeneratedColumnInterface | |
| { | |
| /** | |
| * @var string | |
| */ | |
| private $tablePrefix = ''; | |
| private string $columnName; | |
| private ?string $originalDateColumn = null; | |
| private ?string $timeUnit = null; | |
| private array $indexColumns = []; | |
| public function __construct( | |
| private string $tableName, | |
| string $columnName, | |
| private string $columnType, | |
| private string $as | |
| ) { | |
| $this->indexColumns[] = $columnName; | |
| $this->tablePrefix = MAUTIC_TABLE_PREFIX; | |
| $this->columnName = $columnName; | |
| } | |
| public function getTableName(): string | |
| { | |
| return $this->tablePrefix.$this->tableName; | |
| } | |
| public function getColumnName(): string | |
| { | |
| return $this->columnName; | |
| } | |
| public function addIndexColumn(string $indexColumn): void | |
| { | |
| $this->indexColumns[] = $indexColumn; | |
| } | |
| public function setOriginalDateColumn(string $originalDateColumn, string $timeUnit): void | |
| { | |
| $this->originalDateColumn = $originalDateColumn; | |
| $this->timeUnit = $timeUnit; | |
| } | |
| public function getOriginalDateColumn(): ?string | |
| { | |
| return $this->originalDateColumn; | |
| } | |
| public function getTimeUnit(): string | |
| { | |
| return $this->timeUnit; | |
| } | |
| public function getAlterTableSql(): string | |
| { | |
| return "ALTER TABLE {$this->getTableName()} ADD {$this->getColumnName()} {$this->getColumnDefinition()}; | |
| ALTER TABLE {$this->getTableName()} ADD INDEX `{$this->getIndexName()}`({$this->indexColumnsToString()})"; | |
| } | |
| public function getColumnDefinition(): string | |
| { | |
| return "{$this->columnType} AS ({$this->as}) COMMENT '(DC2Type:generated)'"; | |
| } | |
| public function getIndexColumns(): array | |
| { | |
| return $this->indexColumns; | |
| } | |
| public function getIndexName(): string | |
| { | |
| return $this->tablePrefix.$this->indexColumnsToString('_'); | |
| } | |
| private function indexColumnsToString(string $separator = ', '): string | |
| { | |
| return implode($separator, $this->indexColumns); | |
| } | |
| } | |