From 08060f325359ec9914cad2f8ff2c3a49e47b7938 Mon Sep 17 00:00:00 2001 From: Jakub Vrana Date: Sun, 23 Feb 2025 18:28:33 +0100 Subject: [PATCH] PostgreSQL: Export functions --- adminer/dump.inc.php | 16 +++++++--------- adminer/include/editing.inc.php | 6 +++--- changes.txt | 1 + 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/adminer/dump.inc.php b/adminer/dump.inc.php index 9e1ca291..d79793b5 100644 --- a/adminer/dump.inc.php +++ b/adminer/dump.inc.php @@ -53,12 +53,12 @@ SET foreign_key_checks = 0; $out = ""; if ($_POST["routines"]) { - foreach (array("FUNCTION", "PROCEDURE") as $routine) { - foreach (get_rows("SHOW $routine STATUS WHERE Db = " . q($db), null, "-- ") as $row) { - $create = remove_definer($connection->result("SHOW CREATE $routine " . idf_escape($row["Name"]), 2)); - set_utf8mb4($create); - $out .= ($style != 'DROP+CREATE' ? "DROP $routine IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "") . "$create;;\n\n"; - } + foreach (routines() as $row) { + $name = $row["ROUTINE_NAME"]; + $routine = $row["ROUTINE_TYPE"]; + $create = create_routine($routine, array("name" => $name) + routine($row["SPECIFIC_NAME"], $routine)); + set_utf8mb4($create); + $out .= ($style != 'DROP+CREATE' ? "DROP $routine IF EXISTS " . idf_escape($name) . ";;\n" : "") . "$create;\n\n"; } } @@ -70,9 +70,7 @@ SET foreign_key_checks = 0; } } - if ($out) { - echo "DELIMITER ;;\n\n$out" . "DELIMITER ;\n\n"; - } + echo ($out && $jush == 'sql' ? "DELIMITER ;;\n\n$out" . "DELIMITER ;\n\n" : $out); } if ($_POST["table_style"] || $_POST["data_style"]) { diff --git a/adminer/include/editing.inc.php b/adminer/include/editing.inc.php index c53539fa..cb93d3ff 100644 --- a/adminer/include/editing.inc.php +++ b/adminer/include/editing.inc.php @@ -521,13 +521,13 @@ function create_routine($routine, $row) { $set[] = (preg_match("~^($inout)\$~", $field["inout"]) ? "$field[inout] " : "") . idf_escape($field["field"]) . process_type($field, "CHARACTER SET"); } } - $definition = rtrim("\n$row[definition]", ";"); + $definition = rtrim($row["definition"], ";"); return "CREATE $routine " . idf_escape(trim($row["name"])) . " (" . implode(", ", $set) . ")" - . (isset($_GET["function"]) ? " RETURNS" . process_type($row["returns"], "CHARACTER SET") : "") + . ($routine == "FUNCTION" ? " RETURNS" . process_type($row["returns"], "CHARACTER SET") : "") . ($row["language"] ? " LANGUAGE $row[language]" : "") - . ($jush == "pgsql" ? " AS " . q($definition) : "$definition;") + . ($jush == "pgsql" ? " AS " . q($definition) : "\n$definition;") ; } diff --git a/changes.txt b/changes.txt index 663eb9b9..874a59ab 100644 --- a/changes.txt +++ b/changes.txt @@ -7,6 +7,7 @@ MySQL: Show comments at routine call (bug #874) MySQL: Don't offer empty enum value in edit PostgreSQL: Link user defined types PostgreSQL: Constraint enum values in editing (bug #270) +PostgreSQL: Export functions SQLite: Show all supported pragmas in Variables MS SQL: Allow altering table in non-default schema (bug #405) MS SQL: Fix default values (bug #732, bug #733)