]> git.joonet.de Git - adminer.git/commitdiff
Use VALUES() in INSERT+UPDATE export
authorJakub Vrana <jakub@vrana.cz>
Sun, 12 Aug 2012 05:59:20 +0000 (22:59 -0700)
committerJakub Vrana <jakub@vrana.cz>
Sun, 12 Aug 2012 05:59:20 +0000 (22:59 -0700)
adminer/include/adminer.inc.php
changes.txt
editor/include/adminer.inc.php

index 4dfce81a2be64edfd544ba44d7dc24edbdff52fd..c5a0cd253256926b0712023c39070ea7ffcd5b1b 100644 (file)
@@ -672,12 +672,17 @@ DROP PROCEDURE adminer_alter;
                                $insert = "";
                                $buffer = "";
                                $keys = array();
+                               $suffix = "";
                                while ($row = $result->fetch_row()) {
                                        if (!$keys) {
+                                               $values = array();
                                                foreach ($row as $val) {
                                                        $field = $result->fetch_field();
                                                        $keys[] = $field->name;
+                                                       $key = idf_escape($field->name);
+                                                       $values[] = "$key = VALUES($key)";
                                                }
+                                               $suffix = ($style == "INSERT+UPDATE" ? "\nON DUPLICATE KEY UPDATE " . implode(", ", $values) : "") . ";\n";
                                        }
                                        if ($_POST["format"] != "sql") {
                                                if ($style == "table") {
@@ -692,29 +697,19 @@ DROP PROCEDURE adminer_alter;
                                                foreach ($row as $key => $val) {
                                                        $row[$key] = ($val !== null ? (ereg('int|float|double|decimal|bit', $fields[$keys[$key]]["type"]) ? $val : q($val)) : "NULL"); //! columns looking like functions
                                                }
-                                               $s = implode(",\t", $row);
-                                               if ($style == "INSERT+UPDATE") {
-                                                       $set = array();
-                                                       foreach ($row as $key => $val) {
-                                                               $set[] = idf_escape($keys[$key]) . " = $val";
-                                                       }
-                                                       echo "$insert ($s) ON DUPLICATE KEY UPDATE " . implode(", ", $set) . ";\n";
+                                               $s = ($max_packet ? "\n" : " ") . "(" . implode(",\t", $row) . ")";
+                                               if (!$buffer) {
+                                                       $buffer = $insert . $s;
+                                               } elseif (strlen($buffer) + 4 + strlen($s) + strlen($suffix) < $max_packet) { // 4 - length specification
+                                                       $buffer .= ",$s";
                                                } else {
-                                                       $s = ($max_packet ? "\n" : " ") . "($s)";
-                                                       if (!$buffer) {
-                                                               $buffer = $insert . $s;
-                                                       } elseif (strlen($buffer) + 4 + strlen($s) < $max_packet) { // 4 - length specification
-                                                               $buffer .= ",$s";
-                                                       } else {
-                                                               echo "$buffer;\n";
-                                                               $buffer = $insert . $s;
-                                                       }
+                                                       echo $buffer . $suffix;
+                                                       $buffer = $insert . $s;
                                                }
                                        }
                                }
-                               if ($_POST["format"] == "sql" && $style != "INSERT+UPDATE" && $buffer) {
-                                       $buffer .= ";\n";
-                                       echo $buffer;
+                               if ($buffer) {
+                                       echo $buffer . $suffix;
                                }
                        } elseif ($_POST["format"] == "sql") {
                                echo "-- " . str_replace("\n", " ", $connection->error) . "\n";
index cf7a5976cdd6705dae9d640933beba07b2860c2e..5b5f4835edadf57423743bf44e8a6f1bd4998963 100644 (file)
@@ -1,5 +1,6 @@
 Adminer 3.5.2-dev:
 Edit strings with \n in textarea
+Use VALUES() in INSERT+UPDATE export
 Style logout button as link
 
 Adminer 3.5.1 (released 2012-08-10):
index f69c7df91d406fdc52cd529c8701276caed62760..1e546ffad0776b7533feb8798fb6dffcdeabf1b3 100644 (file)
@@ -468,7 +468,9 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
                        $return = ($match["p1"] != "" ? $match["p1"] : ($match["p2"] != "" ? ($match["p2"] < 70 ? 20 : 19) . $match["p2"] : gmdate("Y"))) . "-$match[p3]$match[p4]-$match[p5]$match[p6]" . end($match);
                }
                $return = ($field["type"] == "bit" && ereg('^[0-9]+$', $value) ? $return : q($return));
-               if ($value == "" && ($field["null"] || !ereg('char|text', $field["type"])) && !like_bool($field)) {
+               if ($value == "" && like_bool($field)) {
+                       $return = "0";
+               } elseif ($value == "" && ($field["null"] || !ereg('char|text', $field["type"]))) {
                        $return = "NULL";
                } elseif (ereg('^(md5|sha1)$', $function)) {
                        $return = "$function($return)";