Subversion-Projekte lars-tiefland.laravel_shop

Revision

Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Doctrine\DBAL\Schema;
4
 
5
use Doctrine\DBAL\Platforms\AbstractPlatform;
6
 
7
use function array_keys;
8
use function array_map;
9
use function strtolower;
10
 
11
/**
12
 * Class for a unique constraint.
13
 */
14
class UniqueConstraint extends AbstractAsset implements Constraint
15
{
16
    /**
17
     * Asset identifier instances of the column names the unique constraint is associated with.
18
     * array($columnName => Identifier)
19
     *
20
     * @var Identifier[]
21
     */
22
    protected $columns = [];
23
 
24
    /**
25
     * Platform specific flags.
26
     * array($flagName => true)
27
     *
28
     * @var true[]
29
     */
30
    protected $flags = [];
31
 
32
    /**
33
     * Platform specific options.
34
     *
35
     * @var mixed[]
36
     */
37
    private array $options;
38
 
39
    /**
40
     * @param string[] $columns
41
     * @param string[] $flags
42
     * @param mixed[]  $options
43
     */
44
    public function __construct(string $name, array $columns, array $flags = [], array $options = [])
45
    {
46
        $this->_setName($name);
47
 
48
        $this->options = $options;
49
 
50
        foreach ($columns as $column) {
51
            $this->addColumn($column);
52
        }
53
 
54
        foreach ($flags as $flag) {
55
            $this->addFlag($flag);
56
        }
57
    }
58
 
59
    /**
60
     * {@inheritdoc}
61
     */
62
    public function getColumns()
63
    {
64
        return array_keys($this->columns);
65
    }
66
 
67
    /**
68
     * {@inheritdoc}
69
     */
70
    public function getQuotedColumns(AbstractPlatform $platform)
71
    {
72
        $columns = [];
73
 
74
        foreach ($this->columns as $column) {
75
            $columns[] = $column->getQuotedName($platform);
76
        }
77
 
78
        return $columns;
79
    }
80
 
81
    /** @return string[] */
82
    public function getUnquotedColumns(): array
83
    {
84
        return array_map([$this, 'trimQuotes'], $this->getColumns());
85
    }
86
 
87
    /**
88
     * Returns platform specific flags for unique constraint.
89
     *
90
     * @return string[]
91
     */
92
    public function getFlags(): array
93
    {
94
        return array_keys($this->flags);
95
    }
96
 
97
    /**
98
     * Adds flag for a unique constraint that translates to platform specific handling.
99
     *
100
     * @return $this
101
     *
102
     * @example $uniqueConstraint->addFlag('CLUSTERED')
103
     */
104
    public function addFlag(string $flag): UniqueConstraint
105
    {
106
        $this->flags[strtolower($flag)] = true;
107
 
108
        return $this;
109
    }
110
 
111
    /**
112
     * Does this unique constraint have a specific flag?
113
     */
114
    public function hasFlag(string $flag): bool
115
    {
116
        return isset($this->flags[strtolower($flag)]);
117
    }
118
 
119
    /**
120
     * Removes a flag.
121
     */
122
    public function removeFlag(string $flag): void
123
    {
124
        unset($this->flags[strtolower($flag)]);
125
    }
126
 
127
    /**
128
     * Does this unique constraint have a specific option?
129
     */
130
    public function hasOption(string $name): bool
131
    {
132
        return isset($this->options[strtolower($name)]);
133
    }
134
 
135
    /** @return mixed */
136
    public function getOption(string $name)
137
    {
138
        return $this->options[strtolower($name)];
139
    }
140
 
141
    /** @return mixed[] */
142
    public function getOptions(): array
143
    {
144
        return $this->options;
145
    }
146
 
147
    /**
148
     * Adds a new column to the unique constraint.
149
     */
150
    protected function addColumn(string $column): void
151
    {
152
        $this->columns[$column] = new Identifier($column);
153
    }
154
}