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 / DB2SchemaManager.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
DB2SchemaManager.php
292 lines
1 <?php
2 namespace MailPoetVendor\Doctrine\DBAL\Schema;
3 if (!defined('ABSPATH')) exit;
4 use MailPoetVendor\Doctrine\DBAL\Exception;
5 use MailPoetVendor\Doctrine\DBAL\Platforms\DB2Platform;
6 use MailPoetVendor\Doctrine\DBAL\Result;
7 use MailPoetVendor\Doctrine\DBAL\Types\Type;
8 use MailPoetVendor\Doctrine\DBAL\Types\Types;
9 use MailPoetVendor\Doctrine\Deprecations\Deprecation;
10 use function array_change_key_case;
11 use function implode;
12 use function preg_match;
13 use function str_replace;
14 use function strpos;
15 use function strtolower;
16 use function strtoupper;
17 use function substr;
18 use const CASE_LOWER;
19 class DB2SchemaManager extends AbstractSchemaManager
20 {
21 public function listTableNames()
22 {
23 return $this->doListTableNames();
24 }
25 public function listTables()
26 {
27 return $this->doListTables();
28 }
29 public function listTableDetails($name)
30 {
31 Deprecation::triggerIfCalledFromOutside('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/5595', '%s is deprecated. Use introspectTable() instead.', __METHOD__);
32 return $this->doListTableDetails($name);
33 }
34 public function listTableColumns($table, $database = null)
35 {
36 return $this->doListTableColumns($table, $database);
37 }
38 public function listTableIndexes($table)
39 {
40 return $this->doListTableIndexes($table);
41 }
42 public function listTableForeignKeys($table, $database = null)
43 {
44 return $this->doListTableForeignKeys($table, $database);
45 }
46 protected function _getPortableTableColumnDefinition($tableColumn)
47 {
48 $tableColumn = array_change_key_case($tableColumn, CASE_LOWER);
49 $length = null;
50 $fixed = null;
51 $scale = \false;
52 $precision = \false;
53 $default = null;
54 if ($tableColumn['default'] !== null && $tableColumn['default'] !== 'NULL') {
55 $default = $tableColumn['default'];
56 if (preg_match('/^\'(.*)\'$/s', $default, $matches) === 1) {
57 $default = str_replace("''", "'", $matches[1]);
58 }
59 }
60 $type = $this->_platform->getDoctrineTypeMapping($tableColumn['typename']);
61 if (isset($tableColumn['comment'])) {
62 $type = $this->extractDoctrineTypeFromComment($tableColumn['comment'], $type);
63 $tableColumn['comment'] = $this->removeDoctrineTypeFromComment($tableColumn['comment'], $type);
64 }
65 switch (strtolower($tableColumn['typename'])) {
66 case 'varchar':
67 if ($tableColumn['codepage'] === 0) {
68 $type = Types::BINARY;
69 }
70 $length = $tableColumn['length'];
71 $fixed = \false;
72 break;
73 case 'character':
74 if ($tableColumn['codepage'] === 0) {
75 $type = Types::BINARY;
76 }
77 $length = $tableColumn['length'];
78 $fixed = \true;
79 break;
80 case 'clob':
81 $length = $tableColumn['length'];
82 break;
83 case 'decimal':
84 case 'double':
85 case 'real':
86 $scale = $tableColumn['scale'];
87 $precision = $tableColumn['length'];
88 break;
89 }
90 $options = ['length' => $length, 'fixed' => (bool) $fixed, 'default' => $default, 'autoincrement' => (bool) $tableColumn['autoincrement'], 'notnull' => $tableColumn['nulls'] === 'N', 'comment' => isset($tableColumn['comment']) && $tableColumn['comment'] !== '' ? $tableColumn['comment'] : null];
91 if ($scale !== null && $precision !== null) {
92 $options['scale'] = $scale;
93 $options['precision'] = $precision;
94 }
95 return new Column($tableColumn['colname'], Type::getType($type), $options);
96 }
97 protected function _getPortableTableDefinition($table)
98 {
99 $table = array_change_key_case($table, CASE_LOWER);
100 return $table['name'];
101 }
102 protected function _getPortableTableIndexesList($tableIndexes, $tableName = null)
103 {
104 foreach ($tableIndexes as &$tableIndexRow) {
105 $tableIndexRow = array_change_key_case($tableIndexRow, CASE_LOWER);
106 $tableIndexRow['primary'] = (bool) $tableIndexRow['primary'];
107 }
108 return parent::_getPortableTableIndexesList($tableIndexes, $tableName);
109 }
110 protected function _getPortableTableForeignKeyDefinition($tableForeignKey)
111 {
112 return new ForeignKeyConstraint($tableForeignKey['local_columns'], $tableForeignKey['foreign_table'], $tableForeignKey['foreign_columns'], $tableForeignKey['name'], $tableForeignKey['options']);
113 }
114 protected function _getPortableTableForeignKeysList($tableForeignKeys)
115 {
116 $foreignKeys = [];
117 foreach ($tableForeignKeys as $tableForeignKey) {
118 $tableForeignKey = array_change_key_case($tableForeignKey, CASE_LOWER);
119 if (!isset($foreignKeys[$tableForeignKey['index_name']])) {
120 $foreignKeys[$tableForeignKey['index_name']] = ['local_columns' => [$tableForeignKey['local_column']], 'foreign_table' => $tableForeignKey['foreign_table'], 'foreign_columns' => [$tableForeignKey['foreign_column']], 'name' => $tableForeignKey['index_name'], 'options' => ['onUpdate' => $tableForeignKey['on_update'], 'onDelete' => $tableForeignKey['on_delete']]];
121 } else {
122 $foreignKeys[$tableForeignKey['index_name']]['local_columns'][] = $tableForeignKey['local_column'];
123 $foreignKeys[$tableForeignKey['index_name']]['foreign_columns'][] = $tableForeignKey['foreign_column'];
124 }
125 }
126 return parent::_getPortableTableForeignKeysList($foreignKeys);
127 }
128 protected function _getPortableForeignKeyRuleDef($def)
129 {
130 if ($def === 'C') {
131 return 'CASCADE';
132 }
133 if ($def === 'N') {
134 return 'SET NULL';
135 }
136 return null;
137 }
138 protected function _getPortableViewDefinition($view)
139 {
140 $view = array_change_key_case($view, CASE_LOWER);
141 $sql = '';
142 $pos = strpos($view['text'], ' AS ');
143 if ($pos !== \false) {
144 $sql = substr($view['text'], $pos + 4);
145 }
146 return new View($view['name'], $sql);
147 }
148 protected function normalizeName(string $name) : string
149 {
150 $identifier = new Identifier($name);
151 return $identifier->isQuoted() ? $identifier->getName() : strtoupper($name);
152 }
153 protected function selectTableNames(string $databaseName) : Result
154 {
155 $sql = <<<'SQL'
156 SELECT NAME
157 FROM SYSIBM.SYSTABLES
158 WHERE TYPE = 'T'
159 AND CREATOR = ?
160 SQL;
161 return $this->_conn->executeQuery($sql, [$databaseName]);
162 }
163 protected function selectTableColumns(string $databaseName, ?string $tableName = null) : Result
164 {
165 $sql = 'SELECT';
166 if ($tableName === null) {
167 $sql .= ' C.TABNAME AS NAME,';
168 }
169 $sql .= <<<'SQL'
170 C.COLNAME,
171 C.TYPENAME,
172 C.CODEPAGE,
173 C.NULLS,
174 C.LENGTH,
175 C.SCALE,
176 C.REMARKS AS COMMENT,
177 CASE
178 WHEN C.GENERATED = 'D' THEN 1
179 ELSE 0
180 END AS AUTOINCREMENT,
181 C.DEFAULT
182 FROM SYSCAT.COLUMNS C
183 JOIN SYSCAT.TABLES AS T
184 ON T.TABSCHEMA = C.TABSCHEMA
185 AND T.TABNAME = C.TABNAME
186 SQL;
187 $conditions = ['C.TABSCHEMA = ?', "T.TYPE = 'T'"];
188 $params = [$databaseName];
189 if ($tableName !== null) {
190 $conditions[] = 'C.TABNAME = ?';
191 $params[] = $tableName;
192 }
193 $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY C.TABNAME, C.COLNO';
194 return $this->_conn->executeQuery($sql, $params);
195 }
196 protected function selectIndexColumns(string $databaseName, ?string $tableName = null) : Result
197 {
198 $sql = 'SELECT';
199 if ($tableName === null) {
200 $sql .= ' IDX.TABNAME AS NAME,';
201 }
202 $sql .= <<<'SQL'
203 IDX.INDNAME AS KEY_NAME,
204 IDXCOL.COLNAME AS COLUMN_NAME,
205 CASE
206 WHEN IDX.UNIQUERULE = 'P' THEN 1
207 ELSE 0
208 END AS PRIMARY,
209 CASE
210 WHEN IDX.UNIQUERULE = 'D' THEN 1
211 ELSE 0
212 END AS NON_UNIQUE
213 FROM SYSCAT.INDEXES AS IDX
214 JOIN SYSCAT.TABLES AS T
215 ON IDX.TABSCHEMA = T.TABSCHEMA AND IDX.TABNAME = T.TABNAME
216 JOIN SYSCAT.INDEXCOLUSE AS IDXCOL
217 ON IDX.INDSCHEMA = IDXCOL.INDSCHEMA AND IDX.INDNAME = IDXCOL.INDNAME
218 SQL;
219 $conditions = ['IDX.TABSCHEMA = ?', "T.TYPE = 'T'"];
220 $params = [$databaseName];
221 if ($tableName !== null) {
222 $conditions[] = 'IDX.TABNAME = ?';
223 $params[] = $tableName;
224 }
225 $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY IDX.INDNAME, IDXCOL.COLSEQ';
226 return $this->_conn->executeQuery($sql, $params);
227 }
228 protected function selectForeignKeyColumns(string $databaseName, ?string $tableName = null) : Result
229 {
230 $sql = 'SELECT';
231 if ($tableName === null) {
232 $sql .= ' R.TABNAME AS NAME,';
233 }
234 $sql .= <<<'SQL'
235 FKCOL.COLNAME AS LOCAL_COLUMN,
236 R.REFTABNAME AS FOREIGN_TABLE,
237 PKCOL.COLNAME AS FOREIGN_COLUMN,
238 R.CONSTNAME AS INDEX_NAME,
239 CASE
240 WHEN R.UPDATERULE = 'R' THEN 'RESTRICT'
241 END AS ON_UPDATE,
242 CASE
243 WHEN R.DELETERULE = 'C' THEN 'CASCADE'
244 WHEN R.DELETERULE = 'N' THEN 'SET NULL'
245 WHEN R.DELETERULE = 'R' THEN 'RESTRICT'
246 END AS ON_DELETE
247 FROM SYSCAT.REFERENCES AS R
248 JOIN SYSCAT.TABLES AS T
249 ON T.TABSCHEMA = R.TABSCHEMA
250 AND T.TABNAME = R.TABNAME
251 JOIN SYSCAT.KEYCOLUSE AS FKCOL
252 ON FKCOL.CONSTNAME = R.CONSTNAME
253 AND FKCOL.TABSCHEMA = R.TABSCHEMA
254 AND FKCOL.TABNAME = R.TABNAME
255 JOIN SYSCAT.KEYCOLUSE AS PKCOL
256 ON PKCOL.CONSTNAME = R.REFKEYNAME
257 AND PKCOL.TABSCHEMA = R.REFTABSCHEMA
258 AND PKCOL.TABNAME = R.REFTABNAME
259 AND PKCOL.COLSEQ = FKCOL.COLSEQ
260 SQL;
261 $conditions = ['R.TABSCHEMA = ?', "T.TYPE = 'T'"];
262 $params = [$databaseName];
263 if ($tableName !== null) {
264 $conditions[] = 'R.TABNAME = ?';
265 $params[] = $tableName;
266 }
267 $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY R.CONSTNAME, FKCOL.COLSEQ';
268 return $this->_conn->executeQuery($sql, $params);
269 }
270 protected function fetchTableOptionsByTable(string $databaseName, ?string $tableName = null) : array
271 {
272 $sql = 'SELECT NAME, REMARKS';
273 $conditions = [];
274 $params = [];
275 if ($tableName !== null) {
276 $conditions[] = 'NAME = ?';
277 $params[] = $tableName;
278 }
279 $sql .= ' FROM SYSIBM.SYSTABLES';
280 if ($conditions !== []) {
281 $sql .= ' WHERE ' . implode(' AND ', $conditions);
282 }
283 $metadata = $this->_conn->executeQuery($sql, $params)->fetchAllAssociativeIndexed();
284 $tableOptions = [];
285 foreach ($metadata as $table => $data) {
286 $data = array_change_key_case($data, CASE_LOWER);
287 $tableOptions[$table] = ['comment' => $data['remarks']];
288 }
289 return $tableOptions;
290 }
291 }
292