]> git.joonet.de Git - adminer.git/commitdiff
Pass $tableStatus to indexMethods, rename
authorJakub Vrana <jakub@vrana.cz>
Thu, 17 Apr 2025 08:22:32 +0000 (10:22 +0200)
committerJakub Vrana <jakub@vrana.cz>
Thu, 17 Apr 2025 08:22:32 +0000 (10:22 +0200)
adminer/drivers/pgsql.inc.php
adminer/include/adminer.inc.php
adminer/include/driver.inc.php
adminer/indexes.inc.php
adminer/table.inc.php
plugins/table-indexes-structure.php

index a2c246116b8edaca066e087d4e3b2c48d8d5611a..259ba8067eb3d4c1a21534674b1572c61cc3e193 100644 (file)
@@ -355,12 +355,12 @@ if (isset($_GET["pgsql"])) {
                        return "(SELECT oid FROM pg_class WHERE relnamespace = $this->nsOid AND relname = " . q($table) . " AND relkind IN ('r', 'm', 'v', 'f', 'p'))";
                }
 
-               function indexMethods(): array {
-                       static $methods = array();
-                       if (!$methods) {
-                               $methods = get_vals("SELECT amname FROM pg_am" . (min_version(9.6) ? " WHERE amtype = 'i'" : "") . " ORDER BY amname = 'btree' DESC, amname");
+               function indexAlgorithms(array $tableStatus): array {
+                       static $return = array();
+                       if (!$return) {
+                               $return = get_vals("SELECT amname FROM pg_am" . (min_version(9.6) ? " WHERE amtype = 'i'" : "") . " ORDER BY amname = 'btree' DESC, amname");
                        }
-                       return $methods;
+                       return $return;
                }
 
                function supportsIndex(array $table_status): bool {
index 1f44018a69f9d7d52a99575912ebeb51c21cd538..1000711ec00745cd3f077ba045a6dbcf623b05f9 100644 (file)
@@ -348,9 +348,11 @@ class Adminer {
 
        /** Print list of indexes on table in tabular format
        * @param Index[] $indexes
+       * @param TableStatus $tableStatus
        */
-       function tableIndexesPrint(array $indexes): void {
+       function tableIndexesPrint(array $indexes, array $tableStatus): void {
                echo "<table>\n";
+               $default_algorithm = first(driver()->indexAlgorithms($tableStatus));
                foreach ($indexes as $name => $index) {
                        ksort($index["columns"]); // enforce correct columns order
                        $print = array();
@@ -362,7 +364,7 @@ class Adminer {
                        }
 
                        echo "<tr title='" . h($name) . "'>";
-                       echo "<th>$index[type]" . ($index['algorithm'] != first(driver()->indexMethods()) ? " ($index[algorithm])" : "");
+                       echo "<th>$index[type]" . ($index['algorithm'] != $default_algorithm ? " ($index[algorithm])" : "");
                        echo "<td>" . implode(", ", $print);
                        echo "\n";
                }
index c7577a5b513fd71c58f248a2fd2103ad5cf48c83..8cf3b3db6ccf26214e4d7dd576386c66807453e5 100644 (file)
@@ -259,10 +259,11 @@ abstract class SqlDriver {
        }
 
        /**
-        * Return list of supported index methods, first one is default
+        * Return list of supported index algorithms, first one is default
+        * @param TableStatus $tableStatus
         * @return list<string>
         */
-       function indexMethods(): array {
+       function indexAlgorithms(array $tableStatus): array {
                return array();
        }
 
index 00fd7f7f9844b87b833bf39ce72ae4673cfd22e7..e874901cadd112665aea689affb63f7bf0aa86bb 100644 (file)
@@ -4,6 +4,7 @@ namespace Adminer;
 $TABLE = $_GET["indexes"];
 $index_types = array("PRIMARY", "UNIQUE", "INDEX");
 $table_status = table_status1($TABLE, true);
+$index_algorithms = driver()->indexAlgorithms($table_status);
 if (preg_match('~MyISAM|M?aria' . (min_version(5.6, '10.0.5') ? '|InnoDB' : '') . '~i', $table_status["Engine"])) {
        $index_types[] = "FULLTEXT";
 }
@@ -29,7 +30,7 @@ if ($_POST && !$error && !$_POST["add"] && !$_POST["drop_col"]) {
                        $columns = array();
                        $lengths = array();
                        $descs = array();
-                       $index_algorithm = (in_array($index["algorithm"], driver()->indexMethods()) ? $index["algorithm"] : "");
+                       $index_algorithm = (in_array($index["algorithm"], $index_algorithms) ? $index["algorithm"] : "");
                        $set = array();
                        ksort($index["columns"]);
                        foreach ($index["columns"] as $key => $column) {
@@ -108,8 +109,8 @@ $show_options = ($_POST ? $_POST["options"] : get_setting("index_options"));
 <thead><tr>
 <th id="label-type"><?php echo lang('Index Type'); ?>
 <?php
-if (driver()->indexMethods()) {
-       echo "<th id='label-method' class='idxopts" .  ($show_options ? "" : " hidden") . "'>" . lang('Algorithm');
+if ($index_algorithms) {
+       echo "<th id='label-algorithm' class='idxopts" .  ($show_options ? "" : " hidden") . "'>" . lang('Algorithm');
 }
 ?>
 <th><input type="submit" class="wayoff"><?php
@@ -135,8 +136,8 @@ foreach ($row["indexes"] as $index) {
        if (!$_POST["drop_col"] || $j != key($_POST["drop_col"])) {
                echo "<tr><td>" . html_select("indexes[$j][type]", array(-1 => "") + $index_types, $index["type"], ($j == count($row["indexes"]) ? "indexesAddRow.call(this);" : ""), "label-type");
 
-               if (driver()->indexMethods()) {
-                       echo "<td class='idxopts" .  ($show_options ? "" : " hidden") . "'>" . html_select("indexes[$j][algorithm]", array_merge(array(""), driver()->indexMethods()), $index['algorithm'], "label-method");
+               if ($index_algorithms) {
+                       echo "<td class='idxopts" .  ($show_options ? "" : " hidden") . "'>" . html_select("indexes[$j][algorithm]", array_merge(array(""), $index_algorithms), $index['algorithm'], "label-algorithm");
                }
 
                echo "<td>";
index a9846d37d8292a8f4307a9be6be0eae07eaada3d..66f6cfe0066c8258547bc6effd8cd62e73242ccb 100644 (file)
@@ -42,7 +42,7 @@ if (support("indexes") && driver()->supportsIndex($table_status)) {
        echo "<h3 id='indexes'>" . lang('Indexes') . "</h3>\n";
        $indexes = indexes($TABLE);
        if ($indexes) {
-               adminer()->tableIndexesPrint($indexes);
+               adminer()->tableIndexesPrint($indexes, $table_status);
        }
        echo '<p class="links"><a href="' . h(ME) . 'indexes=' . urlencode($TABLE) . '">' . lang('Alter indexes') . "</a>\n";
 }
index 528adf108c37a7828eb7ae1185a7b55ae0444228..5c3f7f9263d0da26e6e70a2e4b09339b0757abb0 100644 (file)
@@ -8,10 +8,7 @@
 */
 class AdminerTableIndexesStructure extends Adminer\Plugin {
 
-       /** Print table structure in tabular format
-       * @param Index[] $indexes data about all indexes on a table
-       */
-       function tableIndexesPrint($indexes): bool {
+       function tableIndexesPrint($indexes, $tableStatus): bool {
                echo "<table>\n";
                echo "<thead><tr><th>" . Adminer\lang('Name') . "<th>" . Adminer\lang('Type') . "<th>" . Adminer\lang('Columns') . "</thead>\n";
                foreach ($indexes as $name => $index) {