PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.35.1
MailPoet – Newsletters, Email Marketing, and Automation v5.35.1
5.36.0 5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / vendor-prefixed / doctrine / dbal / src / Schema / Index.php
mailpoet / vendor-prefixed / doctrine / dbal / src / Schema Last commit date
Exception 2 years ago Visitor 9 months ago AbstractAsset.php 2 years ago AbstractSchemaManager.php 9 months ago Column.php 2 years ago ColumnDiff.php 2 years ago Comparator.php 2 years ago Constraint.php 2 years ago DB2SchemaManager.php 2 years ago DefaultSchemaManagerFactory.php 2 years ago ForeignKeyConstraint.php 9 months ago Identifier.php 2 years ago Index.php 2 years ago LegacySchemaManagerFactory.php 2 years ago MySQLSchemaManager.php 9 months ago OracleSchemaManager.php 2 years ago PostgreSQLSchemaManager.php 9 months ago SQLServerSchemaManager.php 9 months ago Schema.php 2 years ago SchemaConfig.php 2 years ago SchemaDiff.php 2 years ago SchemaException.php 2 years ago SchemaManagerFactory.php 2 years ago Sequence.php 2 years ago SqliteSchemaManager.php 8 months ago Table.php 2 years ago TableDiff.php 2 years ago UniqueConstraint.php 2 years ago View.php 2 years ago
Index.php
179 lines
1 <?php
2 namespace MailPoetVendor\Doctrine\DBAL\Schema;
3 if (!defined('ABSPATH')) exit;
4 use MailPoetVendor\Doctrine\DBAL\Platforms\AbstractPlatform;
5 use InvalidArgumentException;
6 use function array_filter;
7 use function array_keys;
8 use function array_map;
9 use function array_search;
10 use function array_shift;
11 use function count;
12 use function strtolower;
13 class Index extends AbstractAsset implements Constraint
14 {
15 protected $_columns = [];
16 protected $_isUnique = \false;
17 protected $_isPrimary = \false;
18 protected $_flags = [];
19 private array $options = [];
20 public function __construct($name, array $columns, $isUnique = \false, $isPrimary = \false, array $flags = [], array $options = [])
21 {
22 $isUnique = $isUnique || $isPrimary;
23 $this->_setName($name);
24 $this->_isUnique = $isUnique;
25 $this->_isPrimary = $isPrimary;
26 $this->options = $options;
27 foreach ($columns as $column) {
28 $this->_addColumn($column);
29 }
30 foreach ($flags as $flag) {
31 $this->addFlag($flag);
32 }
33 }
34 protected function _addColumn(string $column) : void
35 {
36 $this->_columns[$column] = new Identifier($column);
37 }
38 public function getColumns()
39 {
40 return array_keys($this->_columns);
41 }
42 public function getQuotedColumns(AbstractPlatform $platform)
43 {
44 $subParts = $platform->supportsColumnLengthIndexes() && $this->hasOption('lengths') ? $this->getOption('lengths') : [];
45 $columns = [];
46 foreach ($this->_columns as $column) {
47 $length = array_shift($subParts);
48 $quotedColumn = $column->getQuotedName($platform);
49 if ($length !== null) {
50 $quotedColumn .= '(' . $length . ')';
51 }
52 $columns[] = $quotedColumn;
53 }
54 return $columns;
55 }
56 public function getUnquotedColumns()
57 {
58 return array_map([$this, 'trimQuotes'], $this->getColumns());
59 }
60 public function isSimpleIndex()
61 {
62 return !$this->_isPrimary && !$this->_isUnique;
63 }
64 public function isUnique()
65 {
66 return $this->_isUnique;
67 }
68 public function isPrimary()
69 {
70 return $this->_isPrimary;
71 }
72 public function hasColumnAtPosition($name, $pos = 0)
73 {
74 $name = $this->trimQuotes(strtolower($name));
75 $indexColumns = array_map('strtolower', $this->getUnquotedColumns());
76 return array_search($name, $indexColumns, \true) === $pos;
77 }
78 public function spansColumns(array $columnNames)
79 {
80 $columns = $this->getColumns();
81 $numberOfColumns = count($columns);
82 $sameColumns = \true;
83 for ($i = 0; $i < $numberOfColumns; $i++) {
84 if (isset($columnNames[$i]) && $this->trimQuotes(strtolower($columns[$i])) === $this->trimQuotes(strtolower($columnNames[$i]))) {
85 continue;
86 }
87 $sameColumns = \false;
88 }
89 return $sameColumns;
90 }
91 public function isFullfilledBy(Index $other)
92 {
93 return $this->isFulfilledBy($other);
94 }
95 public function isFulfilledBy(Index $other) : bool
96 {
97 // allow the other index to be equally large only. It being larger is an option
98 // but it creates a problem with scenarios of the kind PRIMARY KEY(foo,bar) UNIQUE(foo)
99 if (count($other->getColumns()) !== count($this->getColumns())) {
100 return \false;
101 }
102 // Check if columns are the same, and even in the same order
103 $sameColumns = $this->spansColumns($other->getColumns());
104 if ($sameColumns) {
105 if (!$this->samePartialIndex($other)) {
106 return \false;
107 }
108 if (!$this->hasSameColumnLengths($other)) {
109 return \false;
110 }
111 if (!$this->isUnique() && !$this->isPrimary()) {
112 // this is a special case: If the current key is neither primary or unique, any unique or
113 // primary key will always have the same effect for the index and there cannot be any constraint
114 // overlaps. This means a primary or unique index can always fulfill the requirements of just an
115 // index that has no constraints.
116 return \true;
117 }
118 if ($other->isPrimary() !== $this->isPrimary()) {
119 return \false;
120 }
121 return $other->isUnique() === $this->isUnique();
122 }
123 return \false;
124 }
125 public function overrules(Index $other)
126 {
127 if ($other->isPrimary()) {
128 return \false;
129 }
130 if ($this->isSimpleIndex() && $other->isUnique()) {
131 return \false;
132 }
133 return $this->spansColumns($other->getColumns()) && ($this->isPrimary() || $this->isUnique()) && $this->samePartialIndex($other);
134 }
135 public function getFlags()
136 {
137 return array_keys($this->_flags);
138 }
139 public function addFlag($flag)
140 {
141 $this->_flags[strtolower($flag)] = \true;
142 return $this;
143 }
144 public function hasFlag($flag)
145 {
146 return isset($this->_flags[strtolower($flag)]);
147 }
148 public function removeFlag($flag)
149 {
150 unset($this->_flags[strtolower($flag)]);
151 }
152 public function hasOption($name)
153 {
154 return isset($this->options[strtolower($name)]);
155 }
156 public function getOption($name)
157 {
158 return $this->options[strtolower($name)];
159 }
160 public function getOptions()
161 {
162 return $this->options;
163 }
164 private function samePartialIndex(Index $other) : bool
165 {
166 if ($this->hasOption('where') && $other->hasOption('where') && $this->getOption('where') === $other->getOption('where')) {
167 return \true;
168 }
169 return !$this->hasOption('where') && !$other->hasOption('where');
170 }
171 private function hasSameColumnLengths(self $other) : bool
172 {
173 $filter = static function (?int $length) : bool {
174 return $length !== null;
175 };
176 return array_filter($this->options['lengths'] ?? [], $filter) === array_filter($other->options['lengths'] ?? [], $filter);
177 }
178 }
179