From 46986862321202d7ef7b312fd4dc1cb054d51f89 Mon Sep 17 00:00:00 2001 From: Jakub Vrana Date: Tue, 3 Jun 2025 15:05:12 +0200 Subject: [PATCH] PostgreSQL: Hide only partitions, not all inherited tables from menu --- CHANGELOG.md | 1 + adminer/drivers/pgsql.inc.php | 4 ++-- adminer/include/adminer.inc.php | 2 +- phpstan.neon | 2 +- plugins/menu-links.php | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ffdf9c4..83cf4869 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ - Allow specifying operator in search anywhere - MySQL 5.0-: Do not load partitioning info in alter table (bug #1099) - PostgreSQL: Show structure of inherited tables +- PostgreSQL: Hide only partitions, not all inherited tables from menu - PostgreSQL 11-: Avoid duplicate oid in table status (bug #1089) - Plugins: Methods processList() and killProcess() diff --git a/adminer/drivers/pgsql.inc.php b/adminer/drivers/pgsql.inc.php index 9d4e7223..65f29a7f 100644 --- a/adminer/drivers/pgsql.inc.php +++ b/adminer/drivers/pgsql.inc.php @@ -340,7 +340,7 @@ if (isset($_GET["pgsql"])) { } function partitionsInfo(string $table): array { - $row = connection()->query("SELECT * FROM pg_partitioned_table WHERE partrelid = " . driver()->tableOid($table))->fetch_assoc(); + $row = connection()->query("SELECT * FROM pg_partitioned_table WHERE partrelid = " . $this->tableOid($table))->fetch_assoc(); if ($row) { $attrs = get_vals("SELECT attname FROM pg_attribute WHERE attrelid = $row[partrelid] AND attnum IN (" . str_replace(" ", ", ", $row["partattrs"]) . ")"); //! ordering $by = array('h' => 'HASH', 'l' => 'LIST', 'r' => 'RANGE'); @@ -453,7 +453,7 @@ ORDER BY 1"; obj_description(oid, 'pg_class') AS \"Comment\", " . (min_version(12) ? "''" : "CASE WHEN relhasoids THEN 'oid' ELSE '' END") . " AS \"Oid\", reltuples AS \"Rows\", - (SELECT inhparent FROM pg_inherits WHERE inhrelid = oid) AS inherited, + " . (min_version(10) ? "relispartition::int AS partition," : "") . " current_schema() AS nspname FROM pg_class WHERE relkind IN ('r', 'm', 'v', 'f', 'p') diff --git a/adminer/include/adminer.inc.php b/adminer/include/adminer.inc.php index f68c15e0..69fd67f2 100644 --- a/adminer/include/adminer.inc.php +++ b/adminer/include/adminer.inc.php @@ -1100,7 +1100,7 @@ class Adminer { foreach ($tables as $table => $status) { $table = "$table"; // do not highlight "0" as active everywhere $name = adminer()->tableName($status); - if ($name != "" && !$status["inherited"]) { + if ($name != "" && !$status["partition"]) { echo '
  • " . lang('select') . " " diff --git a/phpstan.neon b/phpstan.neon index 7fac67fa..516bc5b2 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -61,7 +61,7 @@ parameters: max: 80499 typeAliases: - TableStatus: "array{Name:string, Engine?:?string, Comment?:string, Oid?:numeric-string, Rows?:?numeric-string, Collation?:string, Auto_increment?:?numeric-string, Data_length?:numeric-string, Index_length?:numeric-string, Data_free?:numeric-string, Create_options?:string, inherited?:numeric-string, nspname?:string}" + TableStatus: "array{Name:string, Engine?:?string, Comment?:string, Oid?:numeric-string, Rows?:?numeric-string, Collation?:string, Auto_increment?:?numeric-string, Data_length?:numeric-string, Index_length?:numeric-string, Data_free?:numeric-string, Create_options?:string, partition?:numeric-string, nspname?:string}" Field: "array{field?:string, full_type:string, type:string, length:numeric-string, unsigned:string, default?:string, null:bool, auto_increment:bool, collation:string, privileges:int[], comment:string, primary:bool, generated:string, orig?:string, on_update?:string, on_delete?:string, default_constraint?: string}" FieldType: "array{type:string, length:numeric-string, unsigned:string, collation:string}" # subset of RoutineField and Field RoutineField: "array{field:string, type:string, length:numeric-string, unsigned:string, null:bool, full_type:string, collation:string, inout?:string}" diff --git a/plugins/menu-links.php b/plugins/menu-links.php index 544f2cfe..d3dc96e7 100644 --- a/plugins/menu-links.php +++ b/plugins/menu-links.php @@ -36,7 +36,7 @@ class AdminerMenuLinks extends Adminer\Plugin { foreach ($tables as $table => $status) { $table = "$table"; // do not highlight "0" as active everywhere $name = Adminer\adminer()->tableName($status); - if ($name != "" && !$status["inherited"]) { + if ($name != "" && !$status["partition"]) { echo '
  • '; if (!$menu) { echo '