]> git.joonet.de Git - adminer.git/commitdiff
Fix insertUpdate for mssql
authorTakashi SHIRAI <shirai@nintendo.co.jp>
Wed, 26 Feb 2025 04:50:06 +0000 (13:50 +0900)
committerJakub Vrana <jakub@vrana.cz>
Wed, 26 Feb 2025 21:04:58 +0000 (22:04 +0100)
Signed-off-by: Takashi SHIRAI <shirai@nintendo.co.jp>
adminer/drivers/mssql.inc.php

index 6a7825a14fcd5dcd0e50fb82882d442e8bc0bfe9..1d170cf6d39eb8b637c22e06c7caaa1909f08c52 100644 (file)
@@ -186,19 +186,25 @@ if (isset($_GET["mssql"])) {
        class Min_Driver extends Min_SQL {
 
                function insertUpdate($table, $rows, $primary) {
+                       $fields = fields($table);
                        foreach ($rows as $set) {
                                $update = array();
+                               $insert = array();
                                $where = array();
                                foreach ($set as $key => $val) {
-                                       $update[] = "$key = $val";
-                                       if (isset($primary[idf_unescape($key)])) {
+                                       $name = idf_unescape($key);
+                                       if (!$fields[$name]["auto_increment"]) {
+                                               $update[] = "$key = $val";
+                                               $insert[$key] = $val;
+                                       }
+                                       if (isset($primary[$name])) {
                                                $where[] = "$key = $val";
                                        }
                                }
                                //! can use only one query for all rows
                                if (!queries("MERGE " . table($table) . " USING (VALUES(" . implode(", ", $set) . ")) AS source (c" . implode(", c", range(1, count($set))) . ") ON " . implode(" AND ", $where) //! source, c1 - possible conflict
                                        . " WHEN MATCHED THEN UPDATE SET " . implode(", ", $update)
-                                       . " WHEN NOT MATCHED THEN INSERT (" . implode(", ", array_keys($set)) . ") VALUES (" . implode(", ", $set) . ");" // ; is mandatory
+                                       . " WHEN NOT MATCHED THEN INSERT (" . implode(", ", array_keys($insert)) . ") VALUES (" . implode(", ", $insert) . ");" // ; is mandatory
                                )) {
                                        return false;
                                }