PostgreSQL: Support creating array columns

Also allow () in length and IN.
This commit is contained in:
Jakub Vrana 2013-08-06 15:48:45 -07:00
parent 9ffca2f6e6
commit 2e245412dc
5 changed files with 11 additions and 9 deletions

View file

@ -271,12 +271,11 @@ AND a.attnum > 0
ORDER BY a.attnum" ORDER BY a.attnum"
) as $row) { ) as $row) {
//! collation, primary //! collation, primary
$type = $row["full_type"]; preg_match('~([^([]+)(\((.*)\))?((\[[0-9]*])*)$~', $row["full_type"], $match);
if (preg_match('~(.+)\\((.*)\\)$~', $row["full_type"], $match)) { list(, $type, $length, $row["length"], $array) = $match;
list(, $type, $row["length"]) = $match; $row["length"] .= $array;
}
$row["type"] = ($aliases[$type] ? $aliases[$type] : $type); $row["type"] = ($aliases[$type] ? $aliases[$type] : $type);
$row["full_type"] = $row["type"] . ($row["length"] ? "($row[length])" : ""); $row["full_type"] = $row["type"] . $length . $array;
$row["null"] = !$row["attnotnull"]; $row["null"] = !$row["attnotnull"];
$row["auto_increment"] = preg_match('~^nextval\\(~i', $row["default"]); $row["auto_increment"] = preg_match('~^nextval\\(~i', $row["default"]);
$row["privileges"] = array("insert" => 1, "select" => 1, "update" => 1); $row["privileges"] = array("insert" => 1, "select" => 1, "update" => 1);

View file

@ -403,7 +403,7 @@ username.form['auth[driver]'].onchange();
$cond = " $val[op]"; $cond = " $val[op]";
if (preg_match('~IN$~', $val["op"])) { if (preg_match('~IN$~', $val["op"])) {
$in = process_length($val["val"]); $in = process_length($val["val"]);
$cond .= " (" . ($in != "" ? $in : "NULL") . ")"; $cond .= " " . ($in != "" ? $in : "(NULL)");
} elseif ($val["op"] == "SQL") { } elseif ($val["op"] == "SQL") {
$cond = " $val[val]"; // SQL injection $cond = " $val[val]"; // SQL injection
} elseif ($val["op"] == "LIKE %%") { } elseif ($val["op"] == "LIKE %%") {

View file

@ -153,7 +153,10 @@ function edit_type($key, $field, $collations, $foreign_keys = array()) {
*/ */
function process_length($length) { function process_length($length) {
global $enum_length; global $enum_length;
return (preg_match("~^\\s*$enum_length(?:\\s*,\\s*$enum_length)*+\\s*\$~", $length) && preg_match_all("~$enum_length~", $length, $matches) ? implode(",", $matches[0]) : preg_replace('~[^0-9,+-]~', '', $length)); return (preg_match("~^\\s*\\(?\\s*$enum_length(?:\\s*,\\s*$enum_length)*+\\s*\\)?\\s*\$~", $length) && preg_match_all("~$enum_length~", $length, $matches)
? "(" . implode(",", $matches[0]) . ")"
: preg_replace('~[^-0-9,+()[\]]~', '', preg_replace('~^[0-9]+~', '(\1)', $length))
);
} }
/** Create SQL string from field type /** Create SQL string from field type
@ -164,7 +167,7 @@ function process_length($length) {
function process_type($field, $collate = "COLLATE") { function process_type($field, $collate = "COLLATE") {
global $unsigned; global $unsigned;
return " $field[type]" return " $field[type]"
. ($field["length"] != "" ? "(" . process_length($field["length"]) . ")" : "") . process_length($field["length"])
. (preg_match('~(^|[^o])int|float|double|decimal~', $field["type"]) && in_array($field["unsigned"], $unsigned) ? " $field[unsigned]" : "") . (preg_match('~(^|[^o])int|float|double|decimal~', $field["type"]) && in_array($field["unsigned"], $unsigned) ? " $field[unsigned]" : "")
. (preg_match('~char|text|enum|set~', $field["type"]) && $field["collation"] ? " $collate " . q($field["collation"]) : "") . (preg_match('~char|text|enum|set~', $field["type"]) && $field["collation"] ? " $collate " . q($field["collation"]) : "")
; ;

View file

@ -15,6 +15,7 @@ Don't append newlines to uploaded files, bug since Adminer 3.7.0
Don't display SQL edit form on Ctrl+click on the select query, introduced in Adminer 3.6.4 Don't display SQL edit form on Ctrl+click on the select query, introduced in Adminer 3.6.4
Use MD5 for editing long keys only in supported drivers, bug since Adminer 3.6.4 Use MD5 for editing long keys only in supported drivers, bug since Adminer 3.6.4
PostgreSQL: Fix handling of nextval() default values PostgreSQL: Fix handling of nextval() default values
PostgreSQL: Support creating array columns
Adminer 3.7.1 (released 2013-06-29): Adminer 3.7.1 (released 2013-06-29):
Increase click target for checkboxes Increase click target for checkboxes

View file

@ -28,7 +28,6 @@ Delimiter in export and SQL command
Backward keys in Editor Backward keys in Editor
PostgreSQL: PostgreSQL:
Array data types
Display number of schemas in databases overview Display number of schemas in databases overview
Users - SELECT * FROM pg_user Users - SELECT * FROM pg_user
ORDER BY COUNT(*) ORDER BY COUNT(*)