diff --git a/adminer/drivers/mssql.inc.php b/adminer/drivers/mssql.inc.php index 922caee4..753b8806 100644 --- a/adminer/drivers/mssql.inc.php +++ b/adminer/drivers/mssql.inc.php @@ -213,7 +213,8 @@ if (isset($_GET["mssql"])) { } if ($where) { $identity = queries("SET IDENTITY_INSERT " . table($table) . " ON"); - $return = queries("MERGE " . table($table) . " USING (VALUES\n\t" . implode(",\n\t", $values) . "\n) AS source ($columns) ON " . implode(" AND ", $where) //! source, c1 - possible conflict + $return = queries( + "MERGE " . table($table) . " USING (VALUES\n\t" . implode(",\n\t", $values) . "\n) AS source ($columns) ON " . implode(" AND ", $where) //! source, c1 - possible conflict . ($update ? "\nWHEN MATCHED THEN UPDATE SET " . implode(", ", $update) : "") . "\nWHEN NOT MATCHED THEN INSERT (" . implode(", ", array_keys($identity ? $set : $insert)) . ") VALUES (" . ($identity ? $columns : implode(", ", $insert)) . ");" // ; is mandatory ); @@ -331,13 +332,14 @@ WHERE schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND type IN ('S', 'U', 'V') function fields($table) { $comments = get_key_vals("SELECT objname, cast(value as varchar(max)) FROM fn_listextendedproperty('MS_DESCRIPTION', 'schema', " . q(get_schema()) . ", 'table', " . q($table) . ", 'column', NULL)"); $return = array(); - foreach (get_rows("SELECT c.max_length, c.precision, c.scale, c.name, c.is_nullable, c.is_identity, c.collation_name, t.name type, CAST(d.definition as text) [default], d.name default_constraint + foreach ( + get_rows("SELECT c.max_length, c.precision, c.scale, c.name, c.is_nullable, c.is_identity, c.collation_name, t.name type, CAST(d.definition as text) [default], d.name default_constraint FROM sys.all_columns c JOIN sys.all_objects o ON c.object_id = o.object_id JOIN sys.types t ON c.user_type_id = t.user_type_id LEFT JOIN sys.default_constraints d ON c.default_object_id = d.object_id -WHERE o.schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND o.type IN ('S', 'U', 'V') AND o.name = " . q($table) - ) as $row) { +WHERE o.schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND o.type IN ('S', 'U', 'V') AND o.name = " . q($table)) as $row + ) { $type = $row["type"]; $length = (preg_match("~char|binary~", $type) ? $row["max_length"] / ($type[0] == 'n' ? 2 : 1) @@ -550,7 +552,8 @@ WHERE OBJECT_NAME(i.object_id) = " . q($table), $connection2) as $row) { if ($name == "") { return array(); } - $rows = get_rows("SELECT s.name [Trigger], + $rows = get_rows( + "SELECT s.name [Trigger], CASE WHEN OBJECTPROPERTY(s.id, 'ExecIsInsertTrigger') = 1 THEN 'INSERT' WHEN OBJECTPROPERTY(s.id, 'ExecIsUpdateTrigger') = 1 THEN 'UPDATE' WHEN OBJECTPROPERTY(s.id, 'ExecIsDeleteTrigger') = 1 THEN 'DELETE' END [Event], CASE WHEN OBJECTPROPERTY(s.id, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' ELSE 'AFTER' END [Timing], c.text @@ -567,13 +570,14 @@ WHERE s.xtype = 'TR' AND s.name = " . q($name) function triggers($table) { $return = array(); - foreach (get_rows("SELECT sys1.name, + foreach ( + get_rows("SELECT sys1.name, CASE WHEN OBJECTPROPERTY(sys1.id, 'ExecIsInsertTrigger') = 1 THEN 'INSERT' WHEN OBJECTPROPERTY(sys1.id, 'ExecIsUpdateTrigger') = 1 THEN 'UPDATE' WHEN OBJECTPROPERTY(sys1.id, 'ExecIsDeleteTrigger') = 1 THEN 'DELETE' END [Event], CASE WHEN OBJECTPROPERTY(sys1.id, 'ExecIsInsteadOfTrigger') = 1 THEN 'INSTEAD OF' ELSE 'AFTER' END [Timing] FROM sysobjects sys1 JOIN sysobjects sys2 ON sys1.parent_obj = sys2.id -WHERE sys1.xtype = 'TR' AND sys2.name = " . q($table) - ) as $row) { // triggers are not schema-scoped +WHERE sys1.xtype = 'TR' AND sys2.name = " . q($table)) as $row + ) { // triggers are not schema-scoped $return[$row["name"]] = array($row["Timing"], $row["Event"]); } return $return; diff --git a/adminer/drivers/mysql.inc.php b/adminer/drivers/mysql.inc.php index 5ab9a928..d255e909 100644 --- a/adminer/drivers/mysql.inc.php +++ b/adminer/drivers/mysql.inc.php @@ -494,7 +494,8 @@ if (!defined("DRIVER")) { * @return array [$name => $type] */ function tables_list() { - return get_key_vals(min_version(5) + return get_key_vals( + min_version(5) ? "SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ORDER BY TABLE_NAME" : "SHOW TABLES" ); @@ -519,10 +520,13 @@ if (!defined("DRIVER")) { */ function table_status($name = "", $fast = false) { $return = array(); - foreach (get_rows($fast && min_version(5) - ? "SELECT TABLE_NAME AS Name, ENGINE AS Engine, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() " . ($name != "" ? "AND TABLE_NAME = " . q($name) : "ORDER BY Name") - : "SHOW TABLE STATUS" . ($name != "" ? " LIKE " . q(addcslashes($name, "%_\\")) : "") - ) as $row) { + foreach ( + get_rows( + $fast && min_version(5) + ? "SELECT TABLE_NAME AS Name, ENGINE AS Engine, TABLE_COMMENT AS Comment FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() " . ($name != "" ? "AND TABLE_NAME = " . q($name) : "ORDER BY Name") + : "SHOW TABLE STATUS" . ($name != "" ? " LIKE " . q(addcslashes($name, "%_\\")) : "") + ) as $row + ) { if ($row["Engine"] == "InnoDB") { // ignore internal comment, unnecessary since MySQL 5.1.21 $row["Comment"] = preg_replace('~(?:(.+); )?InnoDB free: .*~', '\1', $row["Comment"]); diff --git a/adminer/drivers/oracle.inc.php b/adminer/drivers/oracle.inc.php index 5350beac..3cebc994 100644 --- a/adminer/drivers/oracle.inc.php +++ b/adminer/drivers/oracle.inc.php @@ -194,7 +194,8 @@ if (isset($_GET["oracle"])) { } function get_databases() { - return get_vals("SELECT DISTINCT tablespace_name FROM ( + return get_vals( + "SELECT DISTINCT tablespace_name FROM ( SELECT tablespace_name FROM user_tablespaces UNION SELECT tablespace_name FROM all_tables WHERE tablespace_name IS NOT NULL ) @@ -249,7 +250,8 @@ ORDER BY 1" function tables_list() { $view = views_table("view_name"); $owner = where_owner(" AND "); - return get_key_vals("SELECT table_name, 'table' FROM all_tables WHERE tablespace_name = " . q(DB) . "$owner + return get_key_vals( + "SELECT table_name, 'table' FROM all_tables WHERE tablespace_name = " . q(DB) . "$owner UNION SELECT view_name, 'view' FROM $view ORDER BY 1" ); //! views don't have schema @@ -270,10 +272,11 @@ ORDER BY 1" $db = get_current_db(); $view = views_table("view_name"); $owner = where_owner(" AND "); - foreach (get_rows('SELECT table_name "Name", \'table\' "Engine", avg_row_len * num_rows "Data_length", num_rows "Rows" FROM all_tables WHERE tablespace_name = ' . q($db) . $owner . ($name != "" ? " AND table_name = $search" : "") . " + foreach ( + get_rows('SELECT table_name "Name", \'table\' "Engine", avg_row_len * num_rows "Data_length", num_rows "Rows" FROM all_tables WHERE tablespace_name = ' . q($db) . $owner . ($name != "" ? " AND table_name = $search" : "") . " UNION SELECT view_name, 'view', 0, 0 FROM $view" . ($name != "" ? " WHERE view_name = $search" : "") . " -ORDER BY 1" - ) as $row) { +ORDER BY 1") as $row + ) { if ($name != "") { return $row; } diff --git a/adminer/drivers/pgsql.inc.php b/adminer/drivers/pgsql.inc.php index 29f1afa4..b060995e 100644 --- a/adminer/drivers/pgsql.inc.php +++ b/adminer/drivers/pgsql.inc.php @@ -349,7 +349,8 @@ ORDER BY 1"; function table_status($name = "") { $return = array(); - foreach (get_rows("SELECT + foreach ( + get_rows("SELECT c.relname AS \"Name\", CASE c.relkind WHEN 'r' THEN 'table' WHEN 'm' THEN 'materialized view' ELSE 'view' END AS \"Engine\", pg_table_size(c.oid) AS \"Data_length\", @@ -361,8 +362,8 @@ ORDER BY 1"; FROM pg_class c JOIN pg_namespace n ON(n.nspname = current_schema() AND n.oid = c.relnamespace) WHERE relkind IN ('r', 'm', 'v', 'f', 'p') -" . ($name != "" ? "AND relname = " . q($name) : "ORDER BY relname") - ) as $row) { //! Index_length, Auto_increment +" . ($name != "" ? "AND relname = " . q($name) : "ORDER BY relname")) as $row //! Index_length, Auto_increment + ) { $return[$row["Name"]] = $row; } return ($name != "" ? $return[$name] : $return); @@ -382,7 +383,8 @@ WHERE relkind IN ('r', 'm', 'v', 'f', 'p') 'timestamp without time zone' => 'timestamp', 'timestamp with time zone' => 'timestamptz', ); - foreach (get_rows("SELECT a.attname AS field, format_type(a.atttypid, a.atttypmod) AS full_type, pg_get_expr(d.adbin, d.adrelid) AS default, a.attnotnull::int, col_description(c.oid, a.attnum) AS comment" . (min_version(10) ? ", a.attidentity" : "") . " + foreach ( + get_rows("SELECT a.attname AS field, format_type(a.atttypid, a.atttypmod) AS full_type, pg_get_expr(d.adbin, d.adrelid) AS default, a.attnotnull::int, col_description(c.oid, a.attnum) AS comment" . (min_version(10) ? ", a.attidentity" : "") . " FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid JOIN pg_attribute a ON c.oid = a.attrelid @@ -391,8 +393,8 @@ WHERE c.relname = " . q($table) . " AND n.nspname = current_schema() AND NOT a.attisdropped AND a.attnum > 0 -ORDER BY a.attnum" - ) as $row) { +ORDER BY a.attnum") as $row + ) { //! collation, primary preg_match('~([^([]+)(\((.*)\))?([a-z ]+)?((\[[0-9]*])*)$~', $row["full_type"], $match); list(, $type, $length, $row["length"], $addon, $array) = $match; @@ -730,7 +732,8 @@ ORDER BY SPECIFIC_NAME'); } function types() { - return get_key_vals("SELECT oid, typname + return get_key_vals( + "SELECT oid, typname FROM pg_type WHERE typnamespace = (SELECT oid FROM pg_namespace WHERE nspname = current_schema()) AND typtype IN ('b','d','e') diff --git a/adminer/drivers/sqlite.inc.php b/adminer/drivers/sqlite.inc.php index b03a069a..437c0299 100644 --- a/adminer/drivers/sqlite.inc.php +++ b/adminer/drivers/sqlite.inc.php @@ -575,10 +575,11 @@ if (isset($_GET["sqlite"])) { } } foreach (array_reverse($alter) as $val) { - if (!queries($val[2] == "DROP" + if ( + !queries($val[2] == "DROP" ? "DROP INDEX " . idf_escape($val[1]) - : index_sql($table, $val[0], $val[1], "(" . implode(", ", $val[2]) . ")") - )) { + : index_sql($table, $val[0], $val[1], "(" . implode(", ", $val[2]) . ")")) + ) { return false; } } diff --git a/adminer/event.inc.php b/adminer/event.inc.php index c9fd444d..73cea00d 100644 --- a/adminer/event.inc.php +++ b/adminer/event.inc.php @@ -18,13 +18,17 @@ if ($_POST && !$error) { ) . " ON COMPLETION" . ($row["ON_COMPLETION"] ? "" : " NOT") . " PRESERVE" ; - queries_redirect(substr(ME, 0, -1), ($EVENT != "" ? lang('Event has been altered.') : lang('Event has been created.')), queries(($EVENT != "" - ? "ALTER EVENT " . idf_escape($EVENT) . $schedule - . ($EVENT != $row["EVENT_NAME"] ? "\nRENAME TO " . idf_escape($row["EVENT_NAME"]) : "") - : "CREATE EVENT " . idf_escape($row["EVENT_NAME"]) . $schedule - ) . "\n" . $statuses[$row["STATUS"]] . " COMMENT " . q($row["EVENT_COMMENT"]) - . rtrim(" DO\n$row[EVENT_DEFINITION]", ";") . ";" - )); + queries_redirect( + substr(ME, 0, -1), + ($EVENT != "" ? lang('Event has been altered.') : lang('Event has been created.')), + queries( + ($EVENT != "" + ? "ALTER EVENT " . idf_escape($EVENT) . $schedule . ($EVENT != $row["EVENT_NAME"] ? "\nRENAME TO " . idf_escape($row["EVENT_NAME"]) : "") + : "CREATE EVENT " . idf_escape($row["EVENT_NAME"]) . $schedule + ) . "\n" . $statuses[$row["STATUS"]] . " COMMENT " . q($row["EVENT_COMMENT"]) + . rtrim(" DO\n$row[EVENT_DEFINITION]", ";") . ";" + ) + ); } } diff --git a/adminer/include/bootstrap.inc.php b/adminer/include/bootstrap.inc.php index d83ac4a7..ccf35f04 100644 --- a/adminer/include/bootstrap.inc.php +++ b/adminer/include/bootstrap.inc.php @@ -99,11 +99,13 @@ if ($adminer->operators === null) { define("SERVER", $_GET[DRIVER]); // read from pgsql=localhost define("DB", $_GET["db"]); // for the sake of speed and size -define("ME", preg_replace('~\?.*~', '', relative_uri()) . '?' - . (sid() ? SID . '&' : '') - . (SERVER !== null ? DRIVER . "=" . urlencode(SERVER) . '&' : '') - . (isset($_GET["username"]) ? "username=" . urlencode($_GET["username"]) . '&' : '') - . (DB != "" ? 'db=' . urlencode(DB) . '&' . (isset($_GET["ns"]) ? "ns=" . urlencode($_GET["ns"]) . "&" : "") : '') +define( + "ME", + preg_replace('~\?.*~', '', relative_uri()) . '?' + . (sid() ? SID . '&' : '') + . (SERVER !== null ? DRIVER . "=" . urlencode(SERVER) . '&' : '') + . (isset($_GET["username"]) ? "username=" . urlencode($_GET["username"]) . '&' : '') + . (DB != "" ? 'db=' . urlencode(DB) . '&' . (isset($_GET["ns"]) ? "ns=" . urlencode($_GET["ns"]) . "&" : "") : '') ); include "../adminer/include/design.inc.php"; diff --git a/adminer/include/functions.inc.php b/adminer/include/functions.inc.php index e095afcd..81ba7109 100644 --- a/adminer/include/functions.inc.php +++ b/adminer/include/functions.inc.php @@ -735,7 +735,8 @@ function get_file($key, $decompress = false) { } $name = $file["name"][$key]; $tmp_name = $file["tmp_name"][$key]; - $content = file_get_contents($decompress && preg_match('~\.gz$~', $name) + $content = file_get_contents( + $decompress && preg_match('~\.gz$~', $name) ? "compress.zlib://$tmp_name" : $tmp_name ); //! may not be reachable because of open_basedir diff --git a/editor/include/adminer.inc.php b/editor/include/adminer.inc.php index 52c536aa..10cb532c 100644 --- a/editor/include/adminer.inc.php +++ b/editor/include/adminer.inc.php @@ -423,7 +423,8 @@ ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5 $subject = $_POST["email_subject"]; $message = $_POST["email_message"]; preg_match_all('~\{\$([a-z0-9_]+)\}~i', "$subject.$message", $matches); // allows {$name} in subject or message - $rows = get_rows("SELECT DISTINCT $field" . ($matches[1] ? ", " . implode(", ", array_map('Adminer\idf_escape', array_unique($matches[1]))) : "") . " FROM " . table($_GET["select"]) + $rows = get_rows( + "SELECT DISTINCT $field" . ($matches[1] ? ", " . implode(", ", array_map('Adminer\idf_escape', array_unique($matches[1]))) : "") . " FROM " . table($_GET["select"]) . " WHERE $field IS NOT NULL AND $field != ''" . ($where ? " AND " . implode(" AND ", $where) : "") . ($_POST["all"] ? "" : " AND ((" . implode(") OR (", array_map('Adminer\where_check', (array) $_POST["check"])) . "))") diff --git a/phpcs.xml b/phpcs.xml index 75bb43d8..8b2bd148 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -25,7 +25,6 @@ - diff --git a/plugins/dump-alter.php b/plugins/dump-alter.php index 3ebdf8ba..d9e3049c 100644 --- a/plugins/dump-alter.php +++ b/plugins/dump-alter.php @@ -91,7 +91,8 @@ CREATE PROCEDURE adminer_alter (INOUT alter_command text) BEGIN $default = $row["COLUMN_DEFAULT"]; $row["default"] = ($default !== null ? Adminer\q($default) : "NULL"); $row["after"] = Adminer\q($after); //! rgt AFTER lft, lft AFTER id doesn't work - $row["alter"] = Adminer\escape_string(idf_escape($row["COLUMN_NAME"]) + $row["alter"] = Adminer\escape_string( + idf_escape($row["COLUMN_NAME"]) . " $row[COLUMN_TYPE]" . ($row["COLLATION_NAME"] ? " COLLATE $row[COLLATION_NAME]" : "") . ($default !== null ? " DEFAULT " . ($default == "CURRENT_TIMESTAMP" ? $default : $row["default"]) : "")