![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/old/vendor/magento/framework/Setup/Declaration/Schema/Dto/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Framework\Setup\Declaration\Schema\Dto; use Magento\Framework\Setup\Declaration\Schema\Dto\Constraints\Internal; use Magento\Framework\Setup\Declaration\Schema\Dto\Constraints\Reference; /** * Table structural element * Aggregate inside itself: columns, constraints and indexes * Resource is also specified on this strucural element * * @api */ class Table extends GenericElement implements ElementInterface, ElementDiffAwareInterface { /** * In case if we will need to change this object: add, modify or drop, we will need * to define it by its type */ const TYPE = 'table'; /** * @var Constraint[] */ private $constraints = []; /** * @var Column[] */ private $columns = []; /** * @var string */ protected $type = 'table'; /** * @var Index[] */ private $indexes = []; /** * @var string */ private $resource; /** * @var string */ private $engine; /** * @var string */ private $nameWithoutPrefix; /** * @var null|string */ private $comment; /** * @var string */ private $onCreate; /** * @var string */ private $charset; /** * @var string */ private $collation; /** * @param string $name * @param string $type * @param string $nameWithoutPrefix * @param string $resource * @param string $engine * @param string $charset * @param string $collation * @param string $onCreate * @param string|null $comment * @param array $columns * @param array $indexes * @param array $constraints * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( string $name, string $type, string $nameWithoutPrefix, string $resource, string $engine, string $charset, string $collation, string $onCreate, string $comment = null, array $columns = [], array $indexes = [], array $constraints = [] ) { parent::__construct($name, $type); $this->columns = $columns; $this->indexes = $indexes; $this->constraints = $constraints; $this->resource = $resource; $this->engine = $engine; $this->nameWithoutPrefix = $nameWithoutPrefix; $this->comment = $comment; $this->onCreate = $onCreate; $this->charset = $charset; $this->collation = $collation; } /** * Return different table constraints. * * It can be constraint like unique key or reference to another table, etc * * @return Constraint[] */ public function getConstraints() { return $this->constraints; } /** * Get constraint by name. * * @param string $name * @return Constraint | bool */ public function getConstraintByName($name) { return $this->constraints[$name] ?? false; } /** * This method lookup only for foreign keys constraints * * @return Reference[] */ public function getReferenceConstraints() { $constraints = []; foreach ($this->getConstraints() as $constraint) { if ($constraint instanceof Reference) { $constraints[$constraint->getName()] = $constraint; } } return $constraints; } /** * Returns primary constraint * * As primary constraint always have one name * and can be only one for table * it name is allocated into it constraint * * @return bool|Internal */ public function getPrimaryConstraint() { return $this->constraints[Internal::PRIMARY_NAME] ?? false; } /** * Retrieve internal constraints * * @return array */ public function getInternalConstraints() : array { $constraints = []; foreach ($this->getConstraints() as $constraint) { if ($constraint instanceof Internal) { $constraints[] = $constraint; } } return $constraints; } /** * Get index by name * * @param string $name * @return Index | bool */ public function getIndexByName($name) { return $this->indexes[$name] ?? false; } /** * Return all columns. * * Note, table always must have columns * * @return Column[] */ public function getColumns() { return $this->columns; } /** * Return all indexes, that are applied to table * * @return Index[] */ public function getIndexes() { return $this->indexes; } /** * Retrieve shard name, on which table will exists * * @return string */ public function getResource() { return $this->resource; } /** * Add constraints * * This is workaround, as any DTO object couldnt be changed after instantiation. * However there is case, when we have 2 tables with constraints in different tables, * that depends to each other table. So we need to setup DTO first and only then pass * problematic constraints to it, in order to avoid circular dependency. * * @param Constraint[] $constraints */ public function addConstraints(array $constraints) { $this->constraints = array_replace($this->constraints, $constraints); } /** * Add columns * * @param Column[] $columns */ public function addColumns(array $columns) { $this->columns = array_replace($this->columns, $columns); } /** * Retrieve information about trigger * * @return string */ public function getOnCreate() { return $this->onCreate; } /** * If column exists - retrieve column * * @param string $nameOrId * @return Column | bool */ public function getColumnByName($nameOrId) { if (isset($this->columns[$nameOrId])) { return $this->columns[$nameOrId]; } return false; } /** * Retrieve elements by specific type * * Allowed types: columns, constraints, indexes... * * @param string $type * @return ElementInterface[] */ public function getElementsByType($type) { if (!isset($this->{$type})) { throw new \InvalidArgumentException(sprintf("Type %s is not defined", $type)); } return $this->{$type}; } /** * Add indexes * * This is workaround, as any DTO object couldnt be changed after instantiation. * However there is case, when we depends on column definition we need modify our indexes * * @param array $indexes */ public function addIndexes(array $indexes) { $this->indexes = array_replace($this->indexes, $indexes); } /** * @inheritdoc */ public function getElementType() { return self::TYPE; } /** * Get engine name * * @return string */ public function getEngine(): string { return $this->engine; } /** * @inheritdoc */ public function getDiffSensitiveParams() { return [ 'resource' => $this->getResource(), 'engine' => $this->getEngine(), 'comment' => $this->getComment(), 'charset' => $this->getCharset(), 'collation' => $this->getCollation() ]; } /** * Return charset of table * * @return string */ public function getCharset() : string { return $this->charset; } /** * Return charset of table * * @return string */ public function getCollation() : string { return $this->collation; } /** * Get name without prefix * * @return string */ public function getNameWithoutPrefix(): string { return $this->nameWithoutPrefix; } /** * Get comment * * @return null|string */ public function getComment() { return $this->comment; } }