Thread: [adminer-svn] SF.net SVN: adminer:[1111] trunk/adminer/include/editing.inc.php
Database management in a single PHP file
Brought to you by:
jakubvrana
From: <jak...@us...> - 2009-09-16 21:47:39
|
Revision: 1111 http://adminer.svn.sourceforge.net/adminer/?rev=1111&view=rev Author: jakubvrana Date: 2009-09-16 21:47:23 +0000 (Wed, 16 Sep 2009) Log Message: ----------- Change regular expression (bug #2859386) Modified Paths: -------------- trunk/adminer/include/editing.inc.php Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2009-09-14 19:39:37 UTC (rev 1110) +++ trunk/adminer/include/editing.inc.php 2009-09-16 21:47:23 UTC (rev 1111) @@ -231,9 +231,9 @@ } function routine($name, $type) { - global $dbh, $enum_length, $inout; + global $dbh, $enum_length, $inout, $types; $aliases = array("bit" => "tinyint", "bool" => "tinyint", "boolean" => "tinyint", "integer" => "int", "double precision" => "float", "real" => "float", "dec" => "decimal", "numeric" => "decimal", "fixed" => "decimal", "national char" => "char", "national varchar" => "varchar"); - $type_pattern = "([a-z]+)(?:\\s*\\(((?:[^'\")]*|$enum_length)+)\\))?\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s]+)['\"]?)?"; + $type_pattern = "(" . implode("|", array_keys($types + $aliases)) . ")(?:\\s*\\(((?:[^'\")]*|$enum_length)+)\\))?\\s*(zerofill\\s*)?(unsigned(?:\\s+zerofill)?)?(?:\\s*(?:CHARSET|CHARACTER\\s+SET)\\s*['\"]?([^'\"\\s]+)['\"]?)?"; $pattern = "\\s*(" . ($type == "FUNCTION" ? "" : implode("|", $inout)) . ")?\\s*(?:`((?:[^`]|``)*)`\\s*|\\b(\\S+)\\s+)$type_pattern"; $create = $dbh->result($dbh->query("SHOW CREATE $type " . idf_escape($name)), 2); preg_match("~\\(((?:$pattern\\s*,?)*)\\)" . ($type == "FUNCTION" ? "\\s*RETURNS\\s+$type_pattern" : "") . "\\s*(.*)~is", $create, $match); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-09-19 19:31:23
|
Revision: 1114 http://adminer.svn.sourceforge.net/adminer/?rev=1114&view=rev Author: jakubvrana Date: 2009-09-19 19:31:16 +0000 (Sat, 19 Sep 2009) Log Message: ----------- Save bytes Modified Paths: -------------- trunk/adminer/include/editing.inc.php Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2009-09-19 11:40:26 UTC (rev 1113) +++ trunk/adminer/include/editing.inc.php 2009-09-19 19:31:16 UTC (rev 1114) @@ -130,14 +130,15 @@ } function type_class($type) { - if (ereg('char|text', $type)) { - return " class='char'"; - } elseif (ereg('date|time|year', $type)) { - return " class='date'"; - } elseif (ereg('binary|blob', $type)) { - return " class='binary'"; - } elseif (ereg('enum|set', $type)) { - return " class='enum'"; + foreach (array( + 'char' => 'text', + 'date' => 'time|year', + 'binary' => 'blob', + 'enum' => 'set', + ) as $key => $val) { + if (ereg("$key|$val", $type) { + return " class='$key'"; + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-09-19 19:37:45
|
Revision: 1115 http://adminer.svn.sourceforge.net/adminer/?rev=1115&view=rev Author: jakubvrana Date: 2009-09-19 19:37:39 +0000 (Sat, 19 Sep 2009) Log Message: ----------- Typo Modified Paths: -------------- trunk/adminer/include/editing.inc.php Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2009-09-19 19:31:16 UTC (rev 1114) +++ trunk/adminer/include/editing.inc.php 2009-09-19 19:37:39 UTC (rev 1115) @@ -136,7 +136,7 @@ 'binary' => 'blob', 'enum' => 'set', ) as $key => $val) { - if (ereg("$key|$val", $type) { + if (ereg("$key|$val", $type)) { return " class='$key'"; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-09-20 07:57:23
|
Revision: 1120 http://adminer.svn.sourceforge.net/adminer/?rev=1120&view=rev Author: jakubvrana Date: 2009-09-20 07:57:15 +0000 (Sun, 20 Sep 2009) Log Message: ----------- Detect unchanged timestamp Modified Paths: -------------- trunk/adminer/include/editing.inc.php Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2009-09-20 07:31:46 UTC (rev 1119) +++ trunk/adminer/include/editing.inc.php 2009-09-20 07:57:15 UTC (rev 1120) @@ -122,9 +122,10 @@ function process_field($field, $type_field) { global $dbh; + $default = $field["default"] . ($field["on_update"] ? " ON UPDATE $field[on_update]" : ""); return idf_escape($field["field"]) . process_type($type_field) . ($field["null"] ? " NULL" : " NOT NULL") // NULL for timestamp - . (!$field["has_default"] || $field["auto_increment"] || ereg('text|blob', $field["type"]) ? "" : " DEFAULT " . ($field["type"] == "timestamp" && eregi("^CURRENT_TIMESTAMP( on update CURRENT_TIMESTAMP)?$", $field["default"]) ? $field["default"] : $dbh->quote($field["default"]))) + . (!isset($field["default"]) || $field["auto_increment"] || ereg('text|blob', $field["type"]) ? "" : " DEFAULT " . ($field["type"] == "timestamp" && eregi("^CURRENT_TIMESTAMP( on update CURRENT_TIMESTAMP)?$", $default) ? $default : $dbh->quote($default))) . " COMMENT " . $dbh->quote($field["comment"]) ; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-10-06 10:00:37
|
Revision: 1168 http://adminer.svn.sourceforge.net/adminer/?rev=1168&view=rev Author: jakubvrana Date: 2009-10-06 10:00:23 +0000 (Tue, 06 Oct 2009) Log Message: ----------- Allow char(0) Modified Paths: -------------- trunk/adminer/include/editing.inc.php Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2009-10-05 09:55:26 UTC (rev 1167) +++ trunk/adminer/include/editing.inc.php 2009-10-06 10:00:23 UTC (rev 1168) @@ -114,7 +114,7 @@ function process_type($field, $collate = "COLLATE") { global $connection, $enum_length, $unsigned; return " $field[type]" - . ($field["length"] && !ereg('^date|time$', $field["type"]) ? "(" . process_length($field["length"]) . ")" : "") + . (strlen($field["length"]) && !ereg('^date|time$', $field["type"]) ? "(" . process_length($field["length"]) . ")" : "") . (ereg('int|float|double|decimal', $field["type"]) && in_array($field["unsigned"], $unsigned) ? " $field[unsigned]" : "") . (ereg('char|text|enum|set', $field["type"]) && $field["collation"] ? " $collate " . $connection->quote($field["collation"]) : "") ; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-10-19 04:46:41
|
Revision: 1197 http://adminer.svn.sourceforge.net/adminer/?rev=1197&view=rev Author: jakubvrana Date: 2009-10-19 04:46:33 +0000 (Mon, 19 Oct 2009) Log Message: ----------- Shorten Auto Increment to support 1024 width Modified Paths: -------------- trunk/adminer/include/editing.inc.php Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2009-10-19 04:35:25 UTC (rev 1196) +++ trunk/adminer/include/editing.inc.php 2009-10-19 04:46:33 UTC (rev 1197) @@ -158,7 +158,7 @@ <td><?php echo lang('Options'); ?> <?php if ($type == "TABLE") { ?> <td>NULL -<td><input type="radio" name="auto_increment_col" value=""><?php echo lang('Auto Increment'); ?> +<td><input type="radio" name="auto_increment_col" value=""><acronym title="<?php echo lang('Auto Increment'); ?>">A_I</acronym> <td class="hidden"><?php echo lang('Default values'); ?> <td<?php echo ($column_comments ? "" : " class='hidden'"); ?>><?php echo lang('Comment'); ?> <?php } ?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-10-23 15:43:57
|
Revision: 1214 http://adminer.svn.sourceforge.net/adminer/?rev=1214&view=rev Author: jakubvrana Date: 2009-10-23 15:43:51 +0000 (Fri, 23 Oct 2009) Log Message: ----------- Documentation Modified Paths: -------------- trunk/adminer/include/editing.inc.php Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2009-10-23 15:19:13 UTC (rev 1213) +++ trunk/adminer/include/editing.inc.php 2009-10-23 15:43:51 UTC (rev 1214) @@ -76,6 +76,10 @@ } } +/** Get referencable tables with single column primary key except self +* @param string +* @return array ($table_name => $field) +*/ function referencable_primary($self) { $return = array(); // table_name => field foreach (table_status_referencable() as $table_name => $table) { @@ -94,6 +98,13 @@ return $return; } +/** Print table columns for type edit +* @param string +* @param array +* @param array +* @param array returned by referencable_primary() +* @return null +*/ function edit_type($key, $field, $collations, $foreign_keys = array()) { global $structured_types, $unsigned, $inout; ?> @@ -104,11 +115,20 @@ echo ($unsigned ? " <select name='$key" . "[unsigned]'" . (!$field["type"] || ereg('(int|float|double|decimal)$', $field["type"]) ? "" : " class='hidden'") . '><option>' . optionlist($unsigned, $field["unsigned"]) . '</select>' : ''); } +/** Filter length value including enums +* @param string +* @return string +*/ function process_length($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)); } +/** Create SQL string from field type +* @param array +* @param string +* @return string +*/ function process_type($field, $collate = "COLLATE") { global $connection, $unsigned; return " $field[type]" @@ -118,6 +138,11 @@ ; } +/** Create SQL string from field +* @param array basic field information +* @param array information about field type +* @return string +*/ function process_field($field, $type_field) { global $connection; return idf_escape($field["field"]) . process_type($type_field) @@ -128,6 +153,10 @@ ; } +/** Get type class to use in CSS +* @param string +* @return string class='' +*/ function type_class($type) { foreach (array( 'char' => 'text', @@ -141,12 +170,21 @@ } } +/** Print table interior for fields editing +* @param array +* @param array +* @param string TABLE or PROCEDURE +* @param int number of fields allowed by Suhosin +* @param array returned by referencable_primary() +* @return bool column comments used +*/ function edit_fields($fields, $collations, $type = "TABLE", $allowed = 0, $foreign_keys = array()) { global $inout; $column_comments = false; foreach ($fields as $field) { if (strlen($field["comment"])) { $column_comments = true; + break; } } ?> @@ -193,6 +231,10 @@ return $column_comments; } +/** Move fields up and down or add field +* @param array +* @return null +*/ function process_fields(&$fields) { ksort($fields); $offset = 0; @@ -230,10 +272,19 @@ } } +/** Callback used in routine() +* @param array +* @return string +*/ function normalize_enum($match) { return "'" . str_replace("'", "''", addcslashes(stripcslashes(str_replace($match[0]{0} . $match[0]{0}, $match[0]{0}, substr($match[0], 1, -1))), '\\')) . "'"; } +/** Get information about stored routine +* @param string +* @param string FUNCTION or PROCEDURE +* @return array ("fields" => array("field" => , "type" => , "length" => , "unsigned" => , "inout" => , "collation" => ), "returns" => , "definition" => ) +*/ function routine($name, $type) { global $connection, $enum_length, $inout, $types; $aliases = array("bit" => "tinyint", "bool" => "tinyint", "boolean" => "tinyint", "integer" => "int", "double precision" => "float", "real" => "float", "dec" => "decimal", "numeric" => "decimal", "fixed" => "decimal", "national char" => "char", "national varchar" => "varchar"); @@ -262,6 +313,13 @@ return array("fields" => $fields, "returns" => $returns, "definition" => $match[15]); } +/** Issue grant or revoke commands +* @param string GRANT or REVOKE +* @param array +* @param string +* @param string +* @return +*/ function grant($grant, $privileges, $columns, $on) { if (!$privileges) { return true; @@ -276,6 +334,16 @@ return queries("$grant " . preg_replace('~(GRANT OPTION)\\([^)]*\\)~', '\\1', implode("$columns, ", $privileges) . $columns) . $on); } +/** Drop old object and create a new one +* @param string drop query +* @param string create query +* @param string +* @param string +* @param string +* @param string +* @param string +* @return bool dropped +*/ function drop_create($drop, $create, $location, $message_drop, $message_alter, $message_create, $name) { if ($_POST["drop"]) { return query_redirect($drop, $location, $message_drop, true, !$_POST["dropped"]); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2009-12-17 15:42:33
|
Revision: 1277 http://adminer.svn.sourceforge.net/adminer/?rev=1277&view=rev Author: jakubvrana Date: 2009-12-17 15:42:25 +0000 (Thu, 17 Dec 2009) Log Message: ----------- Maintain parameters order in function edit (thanks to Torben Petersen Egmose) Modified Paths: -------------- trunk/adminer/include/editing.inc.php Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2009-12-17 15:31:24 UTC (rev 1276) +++ trunk/adminer/include/editing.inc.php 2009-12-17 15:42:25 UTC (rev 1277) @@ -297,7 +297,7 @@ foreach ($matches as $param) { $name = str_replace("``", "`", $param[2]) . $param[3]; $data_type = strtolower($param[4]); - $fields[$name] = array( + $fields[] = array( "field" => $name, "type" => (isset($aliases[$data_type]) ? $aliases[$data_type] : $data_type), "length" => preg_replace_callback("~$enum_length~s", 'normalize_enum', $param[5]), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jak...@us...> - 2010-03-11 20:07:21
|
Revision: 1342 http://adminer.svn.sourceforge.net/adminer/?rev=1342&view=rev Author: jakubvrana Date: 2010-03-11 20:07:14 +0000 (Thu, 11 Mar 2010) Log Message: ----------- Display original column name in select Modified Paths: -------------- trunk/adminer/include/editing.inc.php Modified: trunk/adminer/include/editing.inc.php =================================================================== --- trunk/adminer/include/editing.inc.php 2010-03-10 21:42:48 UTC (rev 1341) +++ trunk/adminer/include/editing.inc.php 2010-03-11 20:07:14 UTC (rev 1342) @@ -20,29 +20,31 @@ echo "<thead><tr>"; for ($j=0; $j < count($row); $j++) { $field = $result->fetch_field(); - if ($field->orgtable != "") { - if (!isset($indexes[$field->orgtable])) { + $orgtable = $field->orgtable; + $orgname = $field->orgname; + if ($orgtable != "") { + if (!isset($indexes[$orgtable])) { // find primary key in each table - $indexes[$field->orgtable] = array(); - foreach (indexes($field->orgtable, $connection2) as $index) { + $indexes[$orgtable] = array(); + foreach (indexes($orgtable, $connection2) as $index) { if ($index["type"] == "PRIMARY") { - $indexes[$field->orgtable] = array_flip($index["columns"]); + $indexes[$orgtable] = array_flip($index["columns"]); break; } } - $columns[$field->orgtable] = $indexes[$field->orgtable]; + $columns[$orgtable] = $indexes[$orgtable]; } - if (isset($columns[$field->orgtable][$field->orgname])) { - unset($columns[$field->orgtable][$field->orgname]); - $indexes[$field->orgtable][$field->orgname] = $j; - $links[$j] = $field->orgtable; + if (isset($columns[$orgtable][$orgname])) { + unset($columns[$orgtable][$orgname]); + $indexes[$orgtable][$orgname] = $j; + $links[$j] = $orgtable; } } if ($field->charsetnr == 63) { $blobs[$j] = true; } $types[$j] = $field->type; - echo "<th>" . h($field->name); + echo "<th" . ($orgtable != "" || $field->name != $orgname ? " title='" . h(($orgtable != "" ? "$orgtable." : "") . $orgname) . "'" : "") . ">" . h($field->name); } echo "</thead>\n"; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |