]> git.joonet.de Git - adminer.git/commitdiff
Search for empty enum
authorJakub Vrana <jakub@vrana.cz>
Fri, 21 Jan 2011 16:36:56 +0000 (17:36 +0100)
committerJakub Vrana <jakub@vrana.cz>
Fri, 21 Jan 2011 16:36:56 +0000 (17:36 +0100)
adminer/include/adminer.inc.php
adminer/include/functions.inc.php
editor/include/adminer.inc.php

index 37faf96a92996abf785293842822f1decf6b312f..13295e457382bc1e6b9568dba4d68badd9865d28 100644 (file)
@@ -440,8 +440,7 @@ document.getElementById('username').focus();
                if ($field["type"] == "enum") {
                        return (isset($_GET["select"]) ? "<label><input type='radio'$attrs value='-1' checked><i>" . lang('original') . "</i></label> " : "")
                                . ($field["null"] ? "<label><input type='radio'$attrs value=''" . (isset($value) || isset($_GET["select"]) ? "" : " checked") . "><i>NULL</i></label> " : "")
-                               . "<label><input type='radio'$attrs value='0'" . ($value === 0 ? " checked" : "") . "><i>" . lang('empty') . "</i></label>"
-                               . enum_input("radio", $attrs, $field, $value)
+                               . enum_input("radio", $attrs, $field, $value, 0) // 0 - empty
                        ;
                }
                return "";
index ed4e5194144bb1ffb0108d6414571302c35982ad..3e2b82775c862b3c84b46f26651e440784a793a4 100644 (file)
@@ -620,12 +620,13 @@ function column_foreign_keys($table) {
 * @param string
 * @param array
 * @param mixed int|string|array
+* @param string
 * @return null
 */
-function enum_input($type, $attrs, $field, $value) {
+function enum_input($type, $attrs, $field, $value, $empty = null) {
        global $adminer;
        preg_match_all("~'((?:[^']|'')*)'~", $field["length"], $matches);
-       $return = "";
+       $return = (isset($empty) ? "<label><input type='$type'$attrs value='$empty'" . ((is_array($value) ? in_array($empty, $value) : $value === 0) ? " checked" : "") . "><i>" . lang('empty') . "</i></label>" : "");
        foreach ($matches[1] as $i => $val) {
                $val = stripcslashes(str_replace("''", "'", $val));
                $checked = (is_int($value) ? $value == $i+1 : (is_array($value) ? in_array($i+1, $value) : $value === $val));
index 6d99494fdd45198fd0e58fb49c9be5975092b225..61ca6a92ac2e9b59e11a2158e6747bbedb5e1996 100644 (file)
@@ -203,7 +203,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
                                $key = $keys[$name];
                                $i--;
                                echo "<div>" . h($desc) . "<input type='hidden' name='where[$i][col]' value='" . h($name) . "'>:";
-                               echo enum_input("checkbox", " name='where[$i][val][]'", $field, (array) $where[$key]["val"]); //! impossible to search for NULL
+                               echo enum_input("checkbox", " name='where[$i][val][]'", $field, (array) $where[$key]["val"], ($field["null"] ? 0 : null));
                                echo "</div>\n";
                                unset($columns[$name]);
                        }
@@ -295,7 +295,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
                                foreach (($col != "" ? array($col => $fields[$col]) : $fields) as $name => $field) {
                                        if ($col != "" || is_numeric($val) || !ereg('int|float|double|decimal', $field["type"])) {
                                                if ($col != "" && $field["type"] == "enum") {
-                                                       $conds[] = idf_escape($name) . " IN (" . implode(", ", array_map('intval', $val)) . ")";
+                                                       $conds[] = (in_array(0, $val) ? idf_escape($name) . " IS NULL OR " : "") . idf_escape($name) . " IN (" . implode(", ", array_map('intval', $val)) . ")";
                                                } else {
                                                        $text_type = ereg('char|text|enum|set', $field["type"]);
                                                        $value = $this->processInput($field, ($text_type && ereg('^[^%]+$', $val) ? "%$val%" : $val));
@@ -402,8 +402,7 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5
        function editInput($table, $field, $attrs, $value) {
                if ($field["type"] == "enum") {
                        return (isset($_GET["select"]) ? "<label><input type='radio'$attrs value='-1' checked><i>" . lang('original') . "</i></label> " : "")
-                               . ($field["null"] ? "<label><input type='radio'$attrs value=''" . ($value || isset($_GET["select"]) ? "" : " checked") . "><i>" . lang('empty') . "</i></label>" : "")
-                               . enum_input("radio", $attrs, $field, $value)
+                               . enum_input("radio", $attrs, $field, ($value || isset($_GET["select"]) ? $value : 0), ($field["null"] ? "" : null))
                        ;
                }
                $options = $this->_foreignKeyOptions($table, $field["field"]);