From 9b162e82912b334cf7161a98eebb2a969a6d6c85 Mon Sep 17 00:00:00 2001 From: Jakub Vrana Date: Sat, 22 Mar 2025 20:55:51 +0100 Subject: [PATCH] PostgreSQL: Fix clone after e395fe5 --- adminer/drivers/pgsql.inc.php | 6 +++--- adminer/include/driver.inc.php | 21 ++++++++++----------- adminer/select.inc.php | 2 +- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/adminer/drivers/pgsql.inc.php b/adminer/drivers/pgsql.inc.php index 5612c5a4..a05b1dc4 100644 --- a/adminer/drivers/pgsql.inc.php +++ b/adminer/drivers/pgsql.inc.php @@ -239,11 +239,11 @@ if (isset($_GET["pgsql"])) { $this->types[lang('User types')] = array_flip($types); } - function insertSql($table, $set) { + function insertReturning($table) { $auto_increment = array_filter(fields($table), function ($field) { return $field['auto_increment']; }); - return parent::insertSql($table, $set) . (count($auto_increment) == 1 ? " RETURNING " . idf_escape(key($auto_increment)) : ""); + return (count($auto_increment) == 1 ? " RETURNING " . idf_escape(key($auto_increment)) : ""); } function insertUpdate($table, $rows, $primary) { @@ -783,7 +783,7 @@ ORDER BY SPECIFIC_NAME'); } function last_id($result) { - return (is_object($result) ? $result->fetch_column(0) : 0); + return (is_object($result) && $result->num_rows ? $result->fetch_column(0) : 0); } function explain($connection, $query) { diff --git a/adminer/include/driver.inc.php b/adminer/include/driver.inc.php index f4a5b17a..8dee7d40 100644 --- a/adminer/include/driver.inc.php +++ b/adminer/include/driver.inc.php @@ -139,19 +139,18 @@ abstract class SqlDriver { * @return bool */ function insert($table, $set) { - return queries($this->insertSql($table, $set)); - } - - /** Get SQL query to insert data into table - * @param string - * @param array same as insert() - * @return string - */ - protected function insertSql($table, $set) { - return "INSERT INTO " . table($table) . ($set + return queries("INSERT INTO " . table($table) . ($set ? " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")" : " DEFAULT VALUES" - ); + ) . $this->insertReturning($table)); + } + + /** Get RETURNING clause for INSERT queries, PostgreSQL specific + * @param string + * @return string + */ + function insertReturning($table) { + return ""; } /** Insert or update data in table diff --git a/adminer/select.inc.php b/adminer/select.inc.php index 9f6f2a98..d814ac18 100644 --- a/adminer/select.inc.php +++ b/adminer/select.inc.php @@ -125,7 +125,7 @@ if ($_POST && !$error) { $result = ($_POST["delete"] ? $driver->delete($TABLE, $where_check) : ($_POST["clone"] - ? queries("INSERT $query$where_check") + ? queries("INSERT $query$where_check" . $driver->insertReturning($TABLE)) : $driver->update($TABLE, $set, $where_check) ) );