]> git.joonet.de Git - adminer.git/commitdiff
PostgreSQL: Fix handling of nextval() default values (thanks to @ujovlado)
authorJakub Vrana <jakub@vrana.cz>
Tue, 2 Jul 2013 16:20:06 +0000 (09:20 -0700)
committerJakub Vrana <jakub@vrana.cz>
Tue, 2 Jul 2013 16:20:06 +0000 (09:20 -0700)
adminer/drivers/pgsql.inc.php
adminer/include/editing.inc.php
changes.txt

index 3ee7c86bb957db261827b66a7f3888e8bfd9457f..2e46e28bbd94b7100d5033ac7f628caf2d4c1446 100644 (file)
@@ -252,8 +252,8 @@ ORDER BY a.attnum"
                        $row["null"] = !$row["attnotnull"];
                        $row["auto_increment"] = eregi("^nextval\\(", $row["default"]);
                        $row["privileges"] = array("insert" => 1, "select" => 1, "update" => 1);
-                       if (preg_match('~^(.*)::.+$~', $row["default"], $match)) {
-                               $row["default"] = ($match[1][0] == "'" ? idf_unescape($match[1]) : $match[1]);
+                       if (preg_match('~(.+)::[^)]+(.*)~', $row["default"], $match)) {
+                               $row["default"] = ($match[1][0] == "'" ? idf_unescape($match[1]) : $match[1]) . $match[2];
                        }
                        $return[$row["field"]] = $row;
                }
@@ -372,7 +372,7 @@ ORDER BY conkey, conname") as $row) {
                                        }
                                        $alter[] = "ALTER $column TYPE$val[1]";
                                        if (!$val[6]) {
-                                               $alter[] = "ALTER $column " . ($val[3] ? "SET$val[3]" : "DROP DEFAULT"); //! quoting
+                                               $alter[] = "ALTER $column " . ($val[3] ? "SET$val[3]" : "DROP DEFAULT");
                                                $alter[] = "ALTER $column " . ($val[2] == " NULL" ? "DROP NOT" : "SET") . $val[2];
                                        }
                                }
index d42541ea6add60c3499c9faf851742cd7f51733a..a5986dfe5d84bb49e38bb332acb307e1f92ebc80 100644 (file)
@@ -176,11 +176,17 @@ function process_type($field, $collate = "COLLATE") {
 * @return array array("field", "type", "NULL", "DEFAULT", "ON UPDATE", "COMMENT", "AUTO_INCREMENT")
 */
 function process_field($field, $type_field) {
+       global $jush;
+       $default = $field["default"];
        return array(
                idf_escape(trim($field["field"])),
                process_type($type_field),
                ($field["null"] ? " NULL" : " NOT NULL"), // NULL for timestamp
-               (isset($field["default"]) ? " DEFAULT " . ((ereg("time", $field["type"]) && eregi('^CURRENT_TIMESTAMP$', $field["default"])) || ($field["type"] == "bit" && ereg("^([0-9]+|b'[0-1]+')\$", $field["default"])) ? $field["default"] : q($field["default"])) : ""),
+               (isset($default) ? " DEFAULT " . (
+                       (ereg("time", $field["type"]) && eregi('^CURRENT_TIMESTAMP$', $default))
+                       || ($field["type"] == "bit" && ereg("^([0-9]+|b'[0-1]+')\$", $default))
+                       || ($jush == "pgsql" && ereg("^[a-z]+\(('[^']*')+\)\$", $default))
+                       ? $default : q($default)) : ""),
                ($field["type"] == "timestamp" && $field["on_update"] ? " ON UPDATE $field[on_update]" : ""),
                (support("comment") && $field["comment"] != "" ? " COMMENT " . q($field["comment"]) : ""),
                ($field["auto_increment"] ? auto_increment() : null),
index ce1d8242e3f7723f260aae049dc6efe1ca27bd07..b48919fa505bb5845750857a616b377380f1b76e 100644 (file)
@@ -1,5 +1,6 @@
 Adminer 3.7.2-dev:
 Save and continue edit by AJAX
+PostgreSQL: Fix handling of nextval() default values
 
 Adminer 3.7.1 (released 2013-06-29):
 Increase click target for checkboxes