Statement.php 2.55 KB
Newer Older
Ketan's avatar
Ketan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

namespace Magento\Framework\Setup\Declaration\Schema\Db;

/**
 * Statement aggregator for SQL statements for one table.
 * All statements are independent with each other, but neither statement can be included with other in one alter query.
 */
class Statement
{
    /**
     * @var string
     */
    private $statement;

    /**
     * Type can be: ALTER, CREATE or DROP operations.
     * Depends on type different operations will be executed on compilation.
     *
     * @var string
     */
    private $type;

    /**
     * @var string
     */
    private $tableName;

    /**
     * @var string
     */
    private $resource;

    /**
     * @var callable[]
     */
    private $triggers = [];

    /**
     * @var string
     */
    private $name;

    /**
     * Constructor.
     *
     * @param string $name
     * @param string $tableName
     * @param string $type
     * @param string $statement
     * @param string $resource
     */
    public function __construct(
        string $name,
        string $tableName,
        string $type,
        string $statement,
        string $resource
    ) {
        $this->statement = $statement;
        $this->type = $type;
        $this->tableName = $tableName;
        $this->resource = $resource;
        $this->name = $name;
    }

    /**
     * Get statement.
     *
     * @return string
     */
    public function getStatement(): string
    {
        return $this->statement;
    }

    /**
     * Add trigger to current statement.
     * This means, that statement is final and can`t be modified any more.
     *
     * @param callable $trigger
     */
    public function addTrigger(callable $trigger)
    {
        $this->triggers[] = $trigger;
    }

    /**
     * Get statement type.
     *
     * @return string
     */
    public function getType(): string
    {
        return $this->type;
    }

    /**
     * Get table name.
     *
     * @return string
     */
    public function getTableName(): string
    {
        return $this->tableName;
    }

    /**
     * Get resource name.
     *
     * @return string
     */
    public function getResource(): string
    {
        return $this->resource;
    }

    /**
     * Get triggers array.
     *
     * @return callable[]
     */
    public function getTriggers(): array
    {
        return $this->triggers;
    }

    /**
     * Get statement name.
     *
     * @return string
     */
    public function getName(): string
    {
        return $this->name;
    }
}