]> git.joonet.de Git - adminer.git/commitdiff
PostgreSQL: Support calling functions returning table (fix #1040)
authorJakub Vrana <jakub@vrana.cz>
Tue, 15 Apr 2025 21:22:36 +0000 (23:22 +0200)
committerJakub Vrana <jakub@vrana.cz>
Tue, 15 Apr 2025 21:22:36 +0000 (23:22 +0200)
CHANGELOG.md
adminer/call.inc.php

index e0c0cb5e47dd662c3d61b516a3fa600622bd6d7e..ff7c33f9034050a5b508ba6963b103b8de55c196 100644 (file)
@@ -2,6 +2,7 @@
 - MySQL: Avoid warning on selecting tables with fulltext indexes (bug #1036)
 - PostgreSQL, CockroachDB: Creating partitioned tables (bug #1031)
 - PostgreSQL: Move partitioned tables from table list to parent table
+- PostgreSQL: Support calling functions returning table (bug #1040)
 - Designs: adminer.css with 'prefers-color-scheme: dark' don't disable dark mode
 - Plugins: Method bodyClass() to add &lt;body class>
 
index 404ec52adaad9e3117814b4647bb48d80a09fcbd..e6279c2787a0b6837f863bdb46d5416393d7ad56 100644 (file)
@@ -8,7 +8,7 @@ $routine = routine($_GET["call"], (isset($_GET["callf"]) ? "FUNCTION" : "PROCEDU
 $in = array();
 $out = array();
 foreach ($routine["fields"] as $i => $field) {
-       if (substr($field["inout"], -3) == "OUT") {
+       if (substr($field["inout"], -3) == "OUT" && JUSH == 'sql') {
                $out[$i] = "@" . idf_escape($field["field"]) . " AS " . idf_escape($field["field"]);
        }
        if (!$field["inout"] || substr($field["inout"], 0, 2) == "IN") {
@@ -29,7 +29,11 @@ if (!$error && $_POST) {
                                connection()->query("SET @" . idf_escape($field["field"]) . " = $val");
                        }
                }
-               $call[] = (isset($out[$key]) ? "@" . idf_escape($field["field"]) : $val);
+               if (isset($out[$key])) {
+                       $call[] = "@" . idf_escape($field["field"]);
+               } elseif (in_array($key, $in)) {
+                       $call[] = $val;
+               }
        }
 
        $query = (isset($_GET["callf"]) ? "SELECT" : "CALL") . " " . table($PROCEDURE) . "(" . implode(", ", $call) . ")";