diff --git a/CHANGELOG.md b/CHANGELOG.md index e0c0cb5e..ff7c33f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 <body class> diff --git a/adminer/call.inc.php b/adminer/call.inc.php index 404ec52a..e6279c27 100644 --- a/adminer/call.inc.php +++ b/adminer/call.inc.php @@ -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) . ")";