PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.36.0
MailPoet – Newsletters, Email Marketing, and Automation v5.36.0
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 / OracleSchemaManager.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
OracleSchemaManager.php
335 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\OraclePlatform;
6 use MailPoetVendor\Doctrine\DBAL\Result;
7 use MailPoetVendor\Doctrine\DBAL\Types\Type;
8 use MailPoetVendor\Doctrine\Deprecations\Deprecation;
9 use function array_change_key_case;
10 use function array_values;
11 use function implode;
12 use function is_string;
13 use function preg_match;
14 use function str_replace;
15 use function strpos;
16 use function strtolower;
17 use function strtoupper;
18 use function trim;
19 use const CASE_LOWER;
20 class OracleSchemaManager extends AbstractSchemaManager
21 {
22 public function listTableNames()
23 {
24 return $this->doListTableNames();
25 }
26 public function listTables()
27 {
28 return $this->doListTables();
29 }
30 public function listTableDetails($name)
31 {
32 Deprecation::triggerIfCalledFromOutside('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/5595', '%s is deprecated. Use introspectTable() instead.', __METHOD__);
33 return $this->doListTableDetails($name);
34 }
35 public function listTableColumns($table, $database = null)
36 {
37 return $this->doListTableColumns($table, $database);
38 }
39 public function listTableIndexes($table)
40 {
41 return $this->doListTableIndexes($table);
42 }
43 public function listTableForeignKeys($table, $database = null)
44 {
45 return $this->doListTableForeignKeys($table, $database);
46 }
47 protected function _getPortableViewDefinition($view)
48 {
49 $view = array_change_key_case($view, CASE_LOWER);
50 return new View($this->getQuotedIdentifierName($view['view_name']), $view['text']);
51 }
52 protected function _getPortableTableDefinition($table)
53 {
54 $table = array_change_key_case($table, CASE_LOWER);
55 return $this->getQuotedIdentifierName($table['table_name']);
56 }
57 protected function _getPortableTableIndexesList($tableIndexes, $tableName = null)
58 {
59 $indexBuffer = [];
60 foreach ($tableIndexes as $tableIndex) {
61 $tableIndex = array_change_key_case($tableIndex, CASE_LOWER);
62 $keyName = strtolower($tableIndex['name']);
63 $buffer = [];
64 if ($tableIndex['is_primary'] === 'P') {
65 $keyName = 'primary';
66 $buffer['primary'] = \true;
67 $buffer['non_unique'] = \false;
68 } else {
69 $buffer['primary'] = \false;
70 $buffer['non_unique'] = !$tableIndex['is_unique'];
71 }
72 $buffer['key_name'] = $keyName;
73 $buffer['column_name'] = $this->getQuotedIdentifierName($tableIndex['column_name']);
74 $indexBuffer[] = $buffer;
75 }
76 return parent::_getPortableTableIndexesList($indexBuffer, $tableName);
77 }
78 protected function _getPortableTableColumnDefinition($tableColumn)
79 {
80 $tableColumn = array_change_key_case($tableColumn, CASE_LOWER);
81 $dbType = strtolower($tableColumn['data_type']);
82 if (strpos($dbType, 'timestamp(') === 0) {
83 if (strpos($dbType, 'with time zone') !== \false) {
84 $dbType = 'timestamptz';
85 } else {
86 $dbType = 'timestamp';
87 }
88 }
89 $unsigned = $fixed = $precision = $scale = $length = null;
90 if (!isset($tableColumn['column_name'])) {
91 $tableColumn['column_name'] = '';
92 }
93 // Default values returned from database sometimes have trailing spaces.
94 if (is_string($tableColumn['data_default'])) {
95 $tableColumn['data_default'] = trim($tableColumn['data_default']);
96 }
97 if ($tableColumn['data_default'] === '' || $tableColumn['data_default'] === 'NULL') {
98 $tableColumn['data_default'] = null;
99 }
100 if ($tableColumn['data_default'] !== null) {
101 // Default values returned from database are represented as literal expressions
102 if (preg_match('/^\'(.*)\'$/s', $tableColumn['data_default'], $matches) === 1) {
103 $tableColumn['data_default'] = str_replace("''", "'", $matches[1]);
104 }
105 }
106 if ($tableColumn['data_precision'] !== null) {
107 $precision = (int) $tableColumn['data_precision'];
108 }
109 if ($tableColumn['data_scale'] !== null) {
110 $scale = (int) $tableColumn['data_scale'];
111 }
112 $type = $this->_platform->getDoctrineTypeMapping($dbType);
113 $type = $this->extractDoctrineTypeFromComment($tableColumn['comments'], $type);
114 $tableColumn['comments'] = $this->removeDoctrineTypeFromComment($tableColumn['comments'], $type);
115 switch ($dbType) {
116 case 'number':
117 if ($precision === 20 && $scale === 0) {
118 $type = 'bigint';
119 } elseif ($precision === 5 && $scale === 0) {
120 $type = 'smallint';
121 } elseif ($precision === 1 && $scale === 0) {
122 $type = 'boolean';
123 } elseif ($scale > 0) {
124 $type = 'decimal';
125 }
126 break;
127 case 'varchar':
128 case 'varchar2':
129 case 'nvarchar2':
130 $length = $tableColumn['char_length'];
131 $fixed = \false;
132 break;
133 case 'raw':
134 $length = $tableColumn['data_length'];
135 $fixed = \true;
136 break;
137 case 'char':
138 case 'nchar':
139 $length = $tableColumn['char_length'];
140 $fixed = \true;
141 break;
142 }
143 $options = ['notnull' => $tableColumn['nullable'] === 'N', 'fixed' => (bool) $fixed, 'unsigned' => (bool) $unsigned, 'default' => $tableColumn['data_default'], 'length' => $length, 'precision' => $precision, 'scale' => $scale, 'comment' => isset($tableColumn['comments']) && $tableColumn['comments'] !== '' ? $tableColumn['comments'] : null];
144 return new Column($this->getQuotedIdentifierName($tableColumn['column_name']), Type::getType($type), $options);
145 }
146 protected function _getPortableTableForeignKeysList($tableForeignKeys)
147 {
148 $list = [];
149 foreach ($tableForeignKeys as $value) {
150 $value = array_change_key_case($value, CASE_LOWER);
151 if (!isset($list[$value['constraint_name']])) {
152 if ($value['delete_rule'] === 'NO ACTION') {
153 $value['delete_rule'] = null;
154 }
155 $list[$value['constraint_name']] = ['name' => $this->getQuotedIdentifierName($value['constraint_name']), 'local' => [], 'foreign' => [], 'foreignTable' => $value['references_table'], 'onDelete' => $value['delete_rule']];
156 }
157 $localColumn = $this->getQuotedIdentifierName($value['local_column']);
158 $foreignColumn = $this->getQuotedIdentifierName($value['foreign_column']);
159 $list[$value['constraint_name']]['local'][$value['position']] = $localColumn;
160 $list[$value['constraint_name']]['foreign'][$value['position']] = $foreignColumn;
161 }
162 return parent::_getPortableTableForeignKeysList($list);
163 }
164 protected function _getPortableTableForeignKeyDefinition($tableForeignKey) : ForeignKeyConstraint
165 {
166 return new ForeignKeyConstraint(array_values($tableForeignKey['local']), $this->getQuotedIdentifierName($tableForeignKey['foreignTable']), array_values($tableForeignKey['foreign']), $this->getQuotedIdentifierName($tableForeignKey['name']), ['onDelete' => $tableForeignKey['onDelete']]);
167 }
168 protected function _getPortableSequenceDefinition($sequence)
169 {
170 $sequence = array_change_key_case($sequence, CASE_LOWER);
171 return new Sequence($this->getQuotedIdentifierName($sequence['sequence_name']), (int) $sequence['increment_by'], (int) $sequence['min_value']);
172 }
173 protected function _getPortableDatabaseDefinition($database)
174 {
175 $database = array_change_key_case($database, CASE_LOWER);
176 return $database['username'];
177 }
178 public function createDatabase($database)
179 {
180 $statement = $this->_platform->getCreateDatabaseSQL($database);
181 $params = $this->_conn->getParams();
182 if (isset($params['password'])) {
183 $statement .= ' IDENTIFIED BY ' . $params['password'];
184 }
185 $this->_conn->executeStatement($statement);
186 $statement = 'GRANT DBA TO ' . $database;
187 $this->_conn->executeStatement($statement);
188 }
189 public function dropAutoincrement($table)
190 {
191 $sql = $this->_platform->getDropAutoincrementSql($table);
192 foreach ($sql as $query) {
193 $this->_conn->executeStatement($query);
194 }
195 return \true;
196 }
197 public function dropTable($name)
198 {
199 $this->tryMethod('dropAutoincrement', $name);
200 parent::dropTable($name);
201 }
202 private function getQuotedIdentifierName($identifier) : string
203 {
204 if (preg_match('/[a-z]/', $identifier) === 1) {
205 return $this->_platform->quoteIdentifier($identifier);
206 }
207 return $identifier;
208 }
209 protected function selectTableNames(string $databaseName) : Result
210 {
211 $sql = <<<'SQL'
212 SELECT TABLE_NAME
213 FROM ALL_TABLES
214 WHERE OWNER = :OWNER
215 ORDER BY TABLE_NAME
216 SQL;
217 return $this->_conn->executeQuery($sql, ['OWNER' => $databaseName]);
218 }
219 protected function selectTableColumns(string $databaseName, ?string $tableName = null) : Result
220 {
221 $sql = 'SELECT';
222 if ($tableName === null) {
223 $sql .= ' C.TABLE_NAME,';
224 }
225 $sql .= <<<'SQL'
226 C.COLUMN_NAME,
227 C.DATA_TYPE,
228 C.DATA_DEFAULT,
229 C.DATA_PRECISION,
230 C.DATA_SCALE,
231 C.CHAR_LENGTH,
232 C.DATA_LENGTH,
233 C.NULLABLE,
234 D.COMMENTS
235 FROM ALL_TAB_COLUMNS C
236 INNER JOIN ALL_TABLES T
237 ON T.OWNER = C.OWNER
238 AND T.TABLE_NAME = C.TABLE_NAME
239 LEFT JOIN ALL_COL_COMMENTS D
240 ON D.OWNER = C.OWNER
241 AND D.TABLE_NAME = C.TABLE_NAME
242 AND D.COLUMN_NAME = C.COLUMN_NAME
243 SQL;
244 $conditions = ['C.OWNER = :OWNER'];
245 $params = ['OWNER' => $databaseName];
246 if ($tableName !== null) {
247 $conditions[] = 'C.TABLE_NAME = :TABLE_NAME';
248 $params['TABLE_NAME'] = $tableName;
249 }
250 $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY C.COLUMN_ID';
251 return $this->_conn->executeQuery($sql, $params);
252 }
253 protected function selectIndexColumns(string $databaseName, ?string $tableName = null) : Result
254 {
255 $sql = 'SELECT';
256 if ($tableName === null) {
257 $sql .= ' IND_COL.TABLE_NAME,';
258 }
259 $sql .= <<<'SQL'
260 IND_COL.INDEX_NAME AS NAME,
261 IND.INDEX_TYPE AS TYPE,
262 DECODE(IND.UNIQUENESS, 'NONUNIQUE', 0, 'UNIQUE', 1) AS IS_UNIQUE,
263 IND_COL.COLUMN_NAME,
264 IND_COL.COLUMN_POSITION AS COLUMN_POS,
265 CON.CONSTRAINT_TYPE AS IS_PRIMARY
266 FROM ALL_IND_COLUMNS IND_COL
267 LEFT JOIN ALL_INDEXES IND
268 ON IND.OWNER = IND_COL.INDEX_OWNER
269 AND IND.INDEX_NAME = IND_COL.INDEX_NAME
270 LEFT JOIN ALL_CONSTRAINTS CON
271 ON CON.OWNER = IND_COL.INDEX_OWNER
272 AND CON.INDEX_NAME = IND_COL.INDEX_NAME
273 SQL;
274 $conditions = ['IND_COL.INDEX_OWNER = :OWNER'];
275 $params = ['OWNER' => $databaseName];
276 if ($tableName !== null) {
277 $conditions[] = 'IND_COL.TABLE_NAME = :TABLE_NAME';
278 $params['TABLE_NAME'] = $tableName;
279 }
280 $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY IND_COL.TABLE_NAME, IND_COL.INDEX_NAME' . ', IND_COL.COLUMN_POSITION';
281 return $this->_conn->executeQuery($sql, $params);
282 }
283 protected function selectForeignKeyColumns(string $databaseName, ?string $tableName = null) : Result
284 {
285 $sql = 'SELECT';
286 if ($tableName === null) {
287 $sql .= ' COLS.TABLE_NAME,';
288 }
289 $sql .= <<<'SQL'
290 ALC.CONSTRAINT_NAME,
291 ALC.DELETE_RULE,
292 COLS.COLUMN_NAME LOCAL_COLUMN,
293 COLS.POSITION,
294 R_COLS.TABLE_NAME REFERENCES_TABLE,
295 R_COLS.COLUMN_NAME FOREIGN_COLUMN
296 FROM ALL_CONS_COLUMNS COLS
297 LEFT JOIN ALL_CONSTRAINTS ALC ON ALC.OWNER = COLS.OWNER AND ALC.CONSTRAINT_NAME = COLS.CONSTRAINT_NAME
298 LEFT JOIN ALL_CONS_COLUMNS R_COLS ON R_COLS.OWNER = ALC.R_OWNER AND
299 R_COLS.CONSTRAINT_NAME = ALC.R_CONSTRAINT_NAME AND
300 R_COLS.POSITION = COLS.POSITION
301 SQL;
302 $conditions = ["ALC.CONSTRAINT_TYPE = 'R'", 'COLS.OWNER = :OWNER'];
303 $params = ['OWNER' => $databaseName];
304 if ($tableName !== null) {
305 $conditions[] = 'COLS.TABLE_NAME = :TABLE_NAME';
306 $params['TABLE_NAME'] = $tableName;
307 }
308 $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY COLS.TABLE_NAME, COLS.CONSTRAINT_NAME' . ', COLS.POSITION';
309 return $this->_conn->executeQuery($sql, $params);
310 }
311 protected function fetchTableOptionsByTable(string $databaseName, ?string $tableName = null) : array
312 {
313 $sql = 'SELECT TABLE_NAME, COMMENTS';
314 $conditions = ['OWNER = :OWNER'];
315 $params = ['OWNER' => $databaseName];
316 if ($tableName !== null) {
317 $conditions[] = 'TABLE_NAME = :TABLE_NAME';
318 $params['TABLE_NAME'] = $tableName;
319 }
320 $sql .= ' FROM ALL_TAB_COMMENTS WHERE ' . implode(' AND ', $conditions);
321 $metadata = $this->_conn->executeQuery($sql, $params)->fetchAllAssociativeIndexed();
322 $tableOptions = [];
323 foreach ($metadata as $table => $data) {
324 $data = array_change_key_case($data, CASE_LOWER);
325 $tableOptions[$table] = ['comment' => $data['comments']];
326 }
327 return $tableOptions;
328 }
329 protected function normalizeName(string $name) : string
330 {
331 $identifier = new Identifier($name);
332 return $identifier->isQuoted() ? $identifier->getName() : strtoupper($name);
333 }
334 }
335