]> git.joonet.de Git - adminer.git/commitdiff
Fix foreign key actions (regression from 5.1.1)
authorJakub Vrana <jakub@vrana.cz>
Mon, 7 Apr 2025 17:51:43 +0000 (19:51 +0200)
committerJakub Vrana <jakub@vrana.cz>
Mon, 7 Apr 2025 17:51:43 +0000 (19:51 +0200)
https://github.com/vrana/adminer/discussions/969#discussioncomment-12752117

CHANGELOG.md
adminer/drivers/mysql.inc.php
adminer/drivers/pgsql.inc.php
adminer/include/editing.inc.php

index 0288b6d0da212cc61143af9498ec531aa06384d3..8054a60f298db60a3cae92f1ae2c68e0df389a28 100644 (file)
@@ -1,6 +1,7 @@
 ## Adminer dev
 - Autocomplete SQL commands
 - Do not edit NULL values by Modify (bug #967)
+- Fix foreign key actions (regression from 5.1.1)
 - PostgreSQL: Support COPY FROM stdin in SQL query (bug #942)
 - MySQL: Display number of found rows in group queries (regression from 5.1.1)
 - non-MySQL: Parse '--' without trailing space as comment in SQL command (bug SF-842)
index 4e16df49a7321496259b0d4ff789933ebb6fcedd..0daed0dc08e486f4d53a68cf64f89a4230bc3f8a 100644 (file)
@@ -556,7 +556,7 @@ if (!defined('Adminer\DRIVER')) {
                $create_table = get_val("SHOW CREATE TABLE " . table($table), 1);
                if ($create_table) {
                        preg_match_all(
-                               "~CONSTRAINT ($pattern) FOREIGN KEY ?\\(((?:$pattern,? ?)+)\\) REFERENCES ($pattern)(?:\\.($pattern))? \\(((?:$pattern,? ?)+)\\)(?: ON DELETE (driver()->onActions))?(?: ON UPDATE (driver()->onActions))?~",
+                               "~CONSTRAINT ($pattern) FOREIGN KEY ?\\(((?:$pattern,? ?)+)\\) REFERENCES ($pattern)(?:\\.($pattern))? \\(((?:$pattern,? ?)+)\\)(?: ON DELETE (" . driver()->onActions . "))?(?: ON UPDATE (" . driver()->onActions . "))?~",
                                $create_table,
                                $matches,
                                PREG_SET_ORDER
index 859114768ea2d8ac861bb46a848bd742b89e6027..a9a423f37f6beba8c2360e68295391d44b040be9 100644 (file)
@@ -527,8 +527,8 @@ ORDER BY conkey, conname") as $row
                                        $row['table'] = idf_unescape($match2[4]);
                                }
                                $row['target'] = array_map('Adminer\idf_unescape', array_map('trim', explode(',', $match[3])));
-                               $row['on_delete'] = (preg_match("~ON DELETE (driver()->onActions)~", $match[4], $match2) ? $match2[1] : 'NO ACTION');
-                               $row['on_update'] = (preg_match("~ON UPDATE (driver()->onActions)~", $match[4], $match2) ? $match2[1] : 'NO ACTION');
+                               $row['on_delete'] = (preg_match("~ON DELETE (" . driver()->onActions . ")~", $match[4], $match2) ? $match2[1] : 'NO ACTION');
+                               $row['on_update'] = (preg_match("~ON UPDATE (" . driver()->onActions . ")~", $match[4], $match2) ? $match2[1] : 'NO ACTION');
                                $return[$row['conname']] = $row;
                        }
                }
index d5f8763a936e5d28f127715a2c26ec20030ae1b7..4af1f2722e22459bfe02fddc8fc60ffc9203ae6f 100644 (file)
@@ -470,7 +470,7 @@ function create_routine($routine, array $row): string {
        ksort($fields); // enforce fields order
        foreach ($fields as $field) {
                if ($field["field"] != "") {
-                       $set[] = (preg_match("~^(driver()->inout)\$~", $field["inout"]) ? "$field[inout] " : "") . idf_escape($field["field"]) . process_type($field, "CHARACTER SET");
+                       $set[] = (preg_match("~^(" . driver()->inout . ")\$~", $field["inout"]) ? "$field[inout] " : "") . idf_escape($field["field"]) . process_type($field, "CHARACTER SET");
                }
        }
        $definition = rtrim($row["definition"], ";");
@@ -499,8 +499,8 @@ function format_foreign_key(array $foreign_key): string {
                . ($ns != "" && $ns != $_GET["ns"] ? idf_escape($ns) . "." : "")
                . idf_escape($foreign_key["table"])
                . " (" . implode(", ", array_map('Adminer\idf_escape', $foreign_key["target"])) . ")" //! reuse $name - check in older MySQL versions
-               . (preg_match("~^(driver()->onActions)\$~", $foreign_key["on_delete"]) ? " ON DELETE $foreign_key[on_delete]" : "")
-               . (preg_match("~^(driver()->onActions)\$~", $foreign_key["on_update"]) ? " ON UPDATE $foreign_key[on_update]" : "")
+               . (preg_match("~^(" . driver()->onActions . ")\$~", $foreign_key["on_delete"]) ? " ON DELETE $foreign_key[on_delete]" : "")
+               . (preg_match("~^(" . driver()->onActions . ")\$~", $foreign_key["on_update"]) ? " ON UPDATE $foreign_key[on_update]" : "")
        ;
 }