]> git.joonet.de Git - adminer.git/commitdiff
PostgreSQL: Fix clone after e395fe5
authorJakub Vrana <jakub@vrana.cz>
Sat, 22 Mar 2025 19:55:51 +0000 (20:55 +0100)
committerJakub Vrana <jakub@vrana.cz>
Sat, 22 Mar 2025 19:55:51 +0000 (20:55 +0100)
adminer/drivers/pgsql.inc.php
adminer/include/driver.inc.php
adminer/select.inc.php

index 5612c5a472ef233ed52281ad8893aa10249a4311..a05b1dc41e359e322ce4b80af28d7b36fe003aa5 100644 (file)
@@ -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) {
index f4a5b17a6dd2ae21f885f7e910e7d8c9b34d10f0..8dee7d40882b895946b12ee2005114a4dec4ce07 100644 (file)
@@ -139,19 +139,18 @@ abstract class SqlDriver {
        * @return bool
        */
        function insert($table, $set) {
-               return queries($this->insertSql($table, $set));
+               return queries("INSERT INTO " . table($table) . ($set
+                       ? " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")"
+                       : " DEFAULT VALUES"
+               ) . $this->insertReturning($table));
        }
 
-       /** Get SQL query to insert data into table
+       /** Get RETURNING clause for INSERT queries, PostgreSQL specific
        * @param string
-       * @param array same as insert()
        * @return string
        */
-       protected function insertSql($table, $set) {
-               return "INSERT INTO " . table($table) . ($set
-                       ? " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")"
-                       : " DEFAULT VALUES"
-               );
+       function insertReturning($table) {
+               return "";
        }
 
        /** Insert or update data in table
index 9f6f2a986a473879e04bd36ac92a8aceb9aa14f1..d814ac18abd66f78582caae1ebb1eb0da41ae158 100644 (file)
@@ -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)
                                                )
                                        );