Skip to content

Commit b870e4d

Browse files
Merge pull request #19688 from kamil-tekiela/Fix-bugs-in-relations-tab
Fix bugs in relations tab
2 parents ebc7bd9 + 5e79b88 commit b870e4d

5 files changed

Lines changed: 25 additions & 24 deletions

File tree

phpstan-baseline.neon

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14637,7 +14637,7 @@ parameters:
1463714637
-
1463814638
message: '#^Construct empty\(\) is not allowed\. Use more strict comparison\.$#'
1463914639
identifier: empty.notAllowed
14640-
count: 13
14640+
count: 2
1464114641
path: src/Table/Table.php
1464214642

1464314643
-
@@ -14731,13 +14731,13 @@ parameters:
1473114731
path: src/Table/Table.php
1473214732

1473314733
-
14734-
message: '#^Parameter \#2 \$string of function explode expects string, mixed given\.$#'
14734+
message: '#^Parameter \#2 \$field of method PhpMyAdmin\\Table\\Table\:\:getSQLToCreateForeignKey\(\) expects array\<string\>, array\<int\|string\> given\.$#'
1473514735
identifier: argument.type
1473614736
count: 1
1473714737
path: src/Table/Table.php
1473814738

1473914739
-
14740-
message: '#^Parameter \#3 \$foreignDb of method PhpMyAdmin\\Table\\Table\:\:getSQLToCreateForeignKey\(\) expects string, string\|null given\.$#'
14740+
message: '#^Parameter \#2 \$string of function explode expects string, mixed given\.$#'
1474114741
identifier: argument.type
1474214742
count: 1
1474314743
path: src/Table/Table.php

psalm-baseline.xml

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8738,6 +8738,9 @@
87388738
<code><![CDATA[Config::getInstance()]]></code>
87398739
<code><![CDATA[DatabaseInterface::getInstance()]]></code>
87408740
</DeprecatedMethod>
8741+
<InvalidArgument>
8742+
<code><![CDATA[$existrelForeign[$masterFieldMd5]->indexList]]></code>
8743+
</InvalidArgument>
87418744
<InvalidReturnStatement>
87428745
<code><![CDATA[$tableAutoIncrement ?? '']]></code>
87438746
<code><![CDATA[$this->getStatusInfo('TABLE_COLLATION') ?? '']]></code>
@@ -8798,7 +8801,6 @@
87988801
<PossiblyNullArgument>
87998802
<code><![CDATA[$column['Extra']]]></code>
88008803
<code><![CDATA[$column['Extra']]]></code>
8801-
<code><![CDATA[$existrelForeign[$masterFieldMd5]->refDbName]]></code>
88028804
<code><![CDATA[$existrelForeign[$masterFieldMd5]->refTableName]]></code>
88038805
</PossiblyNullArgument>
88048806
<PossiblyNullOperand>
@@ -8811,11 +8813,6 @@
88118813
<RiskyTruthyFalsyComparison>
88128814
<code><![CDATA[empty($existrelForeign[$masterFieldMd5]->onDelete)]]></code>
88138815
<code><![CDATA[empty($existrelForeign[$masterFieldMd5]->onUpdate)]]></code>
8814-
<code><![CDATA[empty($foreignField)]]></code>
8815-
<code><![CDATA[empty($foreignField[$key])]]></code>
8816-
<code><![CDATA[empty($foreignField[$key])]]></code>
8817-
<code><![CDATA[empty($foreignField[$key])]]></code>
8818-
<code><![CDATA[empty($foreignTable)]]></code>
88198816
</RiskyTruthyFalsyComparison>
88208817
<UnsupportedPropertyReferenceUsage>
88218818
<code><![CDATA[$this->uiprefs =& $_SESSION['tmpval']['table_uiprefs'][$serverId][$this->dbName][$this->name]]]></code>

resources/templates/table/relation/foreign_key_row.twig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@
107107
</span>
108108
</td>
109109
<td>
110-
{% if foreign_db and foreign_table %}
110+
{% if foreign_table is not same as ( '' ) %}
111111
{% for foreign_column in one_key.refIndexList %}
112112
<span class="clearfloat">
113113
{% include 'table/relation/relational_dropdown.twig' with {

src/Controllers/Table/RelationController.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -184,16 +184,16 @@ public function __invoke(ServerRequest $request): Response
184184

185185
foreach ($relationsForeign as $oneKey) {
186186
$foreignDb = $oneKey->refDbName ?? Current::$database;
187-
$foreignTable = false;
187+
$foreignTable = '';
188188
if ($foreignDb !== '') {
189-
$foreignTable = $oneKey->refTableName ?? false;
189+
$foreignTable = $oneKey->refTableName ?? '';
190190
$tables = $this->relation->getTables($foreignDb, $storageEngine);
191191
} else {
192192
$tables = $this->relation->getTables(Current::$database, $storageEngine);
193193
}
194194

195195
$uniqueColumns = [];
196-
if ($foreignDb !== '' && $foreignTable !== false && $foreignTable !== '') {
196+
if ($foreignDb !== '' && $foreignTable !== '') {
197197
$tableObject = new Table($foreignTable, $foreignDb, $this->dbi);
198198
$uniqueColumns = $tableObject->getUniqueColumns(false, false);
199199
}
@@ -225,8 +225,8 @@ public function __invoke(ServerRequest $request): Response
225225
'table' => Current::$table,
226226
'url_params' => UrlParams::$params,
227227
'databases' => $this->dbi->getDatabaseList(),
228-
'foreign_db' => false,
229-
'foreign_table' => false,
228+
'foreign_db' => '',
229+
'foreign_table' => '',
230230
'unique_columns' => [],
231231
'tables' => $tables,
232232
]);
@@ -237,7 +237,7 @@ public function __invoke(ServerRequest $request): Response
237237
// (see bug https://github.com/phpmyadmin/phpmyadmin/issues/8827)
238238
$fieldHash = md5($column->field);
239239

240-
$foreignTable = false;
240+
$foreignTable = '';
241241
$foreignColumn = false;
242242

243243
// Database dropdown
@@ -261,7 +261,7 @@ public function __invoke(ServerRequest $request): Response
261261

262262
// Column dropdown
263263
$uniqueColumns = [];
264-
if ($foreignDb !== '' && $foreignTable !== false && $foreignTable !== '') {
264+
if ($foreignDb !== '' && $foreignTable !== '') {
265265
if (isset($relations[$column->field])) {
266266
/** @var string $foreignColumn */
267267
$foreignColumn = $relations[$column->field]['foreign_field'];

src/Table/Table.php

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1377,7 +1377,11 @@ public function updateInternalRelations(
13771377
$masterField = $multiEditColumnsName[$masterFieldMd5];
13781378
$foreignTable = $destinationTable[$masterFieldMd5];
13791379
$foreignField = $destinationColumn[$masterFieldMd5];
1380-
if (! empty($foreignDb) && ! empty($foreignTable) && ! empty($foreignField)) {
1380+
if (
1381+
$foreignDb !== ''
1382+
&& $foreignTable !== '' && $foreignTable !== null
1383+
&& $foreignField !== '' && $foreignField !== null
1384+
) {
13811385
if (! isset($existrel[$masterField])) {
13821386
$updQuery = 'INSERT INTO '
13831387
. Util::backquote($relationFeature->database)
@@ -1477,20 +1481,20 @@ public function updateForeignKeys(
14771481
$emptyFields = false;
14781482
foreach ($masterField as $key => $oneField) {
14791483
if (
1480-
(! empty($oneField) && empty($foreignField[$key]))
1481-
|| (empty($oneField) && ! empty($foreignField[$key]))
1484+
($oneField !== '' && (! isset($foreignField[$key]) || $foreignField[$key] === ''))
1485+
|| ($oneField === '' && (isset($foreignField[$key]) && $foreignField[$key] !== ''))
14821486
) {
14831487
$emptyFields = true;
14841488
}
14851489

1486-
if (! empty($oneField) || ! empty($foreignField[$key])) {
1490+
if ($oneField !== '' || (isset($foreignField[$key]) && $foreignField[$key] !== '')) {
14871491
continue;
14881492
}
14891493

14901494
unset($masterField[$key], $foreignField[$key]);
14911495
}
14921496

1493-
if (! empty($foreignDb) && ! empty($foreignTable) && ! $emptyFields) {
1497+
if ($foreignDb !== '' && $foreignTable !== '' && ! $emptyFields) {
14941498
if (isset($existrelForeign[$masterFieldMd5])) {
14951499
$constraintName = $existrelForeign[$masterFieldMd5]->constraint;
14961500
$onDelete = ! empty($existrelForeign[$masterFieldMd5]->onDelete)
@@ -1594,8 +1598,8 @@ public function updateForeignKeys(
15941598
$sqlQueryRecreate = '# Restoring the dropped constraint...' . "\n";
15951599
$sqlQueryRecreate .= $this->getSQLToCreateForeignKey(
15961600
$table,
1597-
$masterField,
1598-
$existrelForeign[$masterFieldMd5]->refDbName,
1601+
$existrelForeign[$masterFieldMd5]->indexList,
1602+
$existrelForeign[$masterFieldMd5]->refDbName ?? Current::$database,
15991603
$existrelForeign[$masterFieldMd5]->refTableName,
16001604
$existrelForeign[$masterFieldMd5]->refIndexList,
16011605
$existrelForeign[$masterFieldMd5]->constraint,

0 commit comments

Comments
 (0)