Skip to content

Commit

Permalink
Fix error when a db group name is same as container name
Browse files Browse the repository at this point in the history
Fixes #17659

Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
  • Loading branch information
MauricioFauth committed Jul 23, 2022
1 parent 21c36a0 commit e2c7aa8
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 5 deletions.
1 change: 1 addition & 0 deletions ChangeLog
Expand Up @@ -23,6 +23,7 @@ phpMyAdmin - ChangeLog
- issue #17593 Table filtering now works when action buttons are on the right side of the row
- issue #17388 Find and Replace using regex now makes a valid query if no matching result set found
- issue #17551 Enum/Set editor will not fail to open when creating a new column
- issue #17659 Fix error when a database group is named tables, views, functions, procedures or events

5.2.0 (2022-05-10)
- issue #16521 Upgrade Bootstrap to version 5
Expand Down
6 changes: 2 additions & 4 deletions libraries/classes/Navigation/NavigationTree.php
Expand Up @@ -41,7 +41,6 @@
use function mb_strlen;
use function mb_strpos;
use function mb_substr;
use function method_exists;
use function sort;
use function sprintf;
use function strcasecmp;
Expand Down Expand Up @@ -1306,11 +1305,10 @@ private function fastFilterHtml(Node $node): string

$nodeIsSpecial = in_array($node->realName, self::SPECIAL_NODE_NAMES, true);

/** @var Node $realParent */
$realParent = $node->realParent();
if (
($nodeIsContainer && $nodeIsSpecial)
&& method_exists($realParent, 'getPresence')
$nodeIsContainer && $nodeIsSpecial
&& $realParent instanceof Node
&& $realParent->getPresence($node->realName) >= $filterItemMin
) {
$paths = $node->getPaths();
Expand Down
32 changes: 31 additions & 1 deletion test/classes/Navigation/NavigationTreeTest.php
Expand Up @@ -37,7 +37,7 @@ protected function setUp(): void
$GLOBALS['table'] = '';
$GLOBALS['PMA_PHP_SELF'] = '';

$this->object = new NavigationTree(new Template(), $GLOBALS['dbi']);
$this->object = new NavigationTree(new Template(), $this->dbi);
}

/**
Expand Down Expand Up @@ -76,4 +76,34 @@ public function testRenderDbSelect(): void
$result = $this->object->renderDbSelect();
$this->assertStringContainsString('pma_navigation_select_database', $result);
}

public function testDatabaseGrouping(): void
{
$GLOBALS['db'] = '';
$GLOBALS['cfg']['NavigationTreeDbSeparator'] = '__';

// phpcs:disable Generic.Files.LineLength.TooLong
$this->dummyDbi->addResult(
'SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`, (SELECT DB_first_level FROM ( SELECT DISTINCT SUBSTRING_INDEX(SCHEMA_NAME, \'__\', 1) DB_first_level FROM INFORMATION_SCHEMA.SCHEMATA WHERE TRUE ) t ORDER BY DB_first_level ASC LIMIT 0, 100) t2 WHERE TRUE AND 1 = LOCATE(CONCAT(DB_first_level, \'__\'), CONCAT(SCHEMA_NAME, \'__\')) ORDER BY SCHEMA_NAME ASC',
[['functions__a'], ['functions__b']],
['SCHEMA_NAME']
);
$this->dummyDbi->addResult(
'SELECT COUNT(*) FROM ( SELECT DISTINCT SUBSTRING_INDEX(SCHEMA_NAME, \'__\', 1) DB_first_level FROM INFORMATION_SCHEMA.SCHEMATA WHERE TRUE ) t',
[['2']]
);
$this->dummyDbi->addResult(
'SELECT COUNT(*) FROM ( SELECT DISTINCT SUBSTRING_INDEX(SCHEMA_NAME, \'__\', 1) DB_first_level FROM INFORMATION_SCHEMA.SCHEMATA WHERE TRUE ) t',
[['2']]
);
// phpcs:enable

$object = new NavigationTree(new Template(), $this->dbi);
$result = $object->renderState();
$this->assertStringContainsString('<li class="first navGroup">', $result);
$this->assertStringContainsString('functions' . "\n", $result);
$this->assertStringContainsString('<div class="list_container" style="display: none;">', $result);
$this->assertStringContainsString('functions__a', $result);
$this->assertStringContainsString('functions__b', $result);
}
}

0 comments on commit e2c7aa8

Please sign in to comment.