]> git.joonet.de Git - adminer.git/commitdiff
PostgreSQL: Display auto_increment of inserted rows
authorJakub Vrana <jakub@vrana.cz>
Mon, 17 Mar 2025 18:56:01 +0000 (19:56 +0100)
committerJakub Vrana <jakub@vrana.cz>
Mon, 17 Mar 2025 18:58:22 +0000 (19:58 +0100)
adminer/drivers/pgsql.inc.php
adminer/include/driver.inc.php
adminer/include/pdo.inc.php
changes.txt

index e8684cc88f5ce675582f2577e02d077601ab1163..1c8a19875fc121c49c264628de38b814a779b1b1 100644 (file)
@@ -241,6 +241,13 @@ if (isset($_GET["pgsql"])) {
                        $this->types[lang('User types')] = array_flip($types);
                }
 
+               function insertSql($table, $set) {
+                       $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)) : "");
+               }
+
                function insertUpdate($table, $rows, $primary) {
                        global $connection;
                        foreach ($rows as $set) {
@@ -781,7 +788,7 @@ ORDER BY SPECIFIC_NAME');
        }
 
        function last_id($result) {
-               return 0; // there can be several sequences
+               return (is_object($result) ? $result->fetch_column(0) : 0);
        }
 
        function explain($connection, $query) {
index ae9289cf4670b5cc0ec7517e015090540f2f08b6..75b462abd09ee01cac177aec4cefd93498070efe 100644 (file)
@@ -139,10 +139,19 @@ abstract class SqlDriver {
        * @return bool
        */
        function insert($table, $set) {
-               return queries("INSERT INTO " . table($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
                        ? " (" . implode(", ", array_keys($set)) . ")\nVALUES (" . implode(", ", $set) . ")"
                        : " DEFAULT VALUES"
-               ));
+               );
        }
 
        /** Insert or update data in table
index 107ac80accb50702bb329bd7b0931445c52779c2..51171cc192161bcba15c454f73d680fadc4604b3 100644 (file)
@@ -87,6 +87,10 @@ if (extension_loaded('pdo')) {
                        return $this->fetch(\PDO::FETCH_NUM);
                }
 
+               function fetch_column($field) {
+                       return $this->fetchColumn($field);
+               }
+
                function fetch_field() {
                        $row = (object) $this->getColumnMeta($this->_offset++);
                        $row->orgtable = $row->table;
index 65919e81fe89ba95789f233aa2c1b9240a601f9e..11bc385306692e0240177e2e7dd0493c089d6265 100644 (file)
@@ -1,4 +1,5 @@
 Adminer dev:
+PostgreSQL: Display auto_increment of inserted rows
 
 Adminer 5.0.6 (released 2025-03-17):
 Align numbers right (bug #912)