diff --git a/adminer/drivers/mssql.inc.php b/adminer/drivers/mssql.inc.php index 5f0dce39..3dde8f82 100644 --- a/adminer/drivers/mssql.inc.php +++ b/adminer/drivers/mssql.inc.php @@ -343,18 +343,15 @@ WHERE o.schema_id = SCHEMA_ID(" . q(get_schema()) . ") AND o.type IN ('S', 'U', } $return = array(); // sp_statistics doesn't return information about primary key - $result = $connection2->query("SELECT indexes.name, key_ordinal, is_unique, is_primary_key, columns.name AS column_name + foreach (get_rows("SELECT indexes.name, key_ordinal, is_unique, is_primary_key, columns.name AS column_name FROM sys.indexes INNER JOIN sys.index_columns ON indexes.object_id = index_columns.object_id AND indexes.index_id = index_columns.index_id INNER JOIN sys.columns ON index_columns.object_id = columns.object_id AND index_columns.column_id = columns.column_id WHERE OBJECT_NAME(indexes.object_id) = " . q($table) - ); - if ($result) { - while ($row = $result->fetch_assoc()) { - $return[$row["name"]]["type"] = ($row["is_primary_key"] ? "PRIMARY" : ($row["is_unique"] ? "UNIQUE" : "INDEX")); - $return[$row["name"]]["lengths"] = array(); - $return[$row["name"]]["columns"][$row["key_ordinal"]] = $row["column_name"]; - } + , $connection2) as $row) { + $return[$row["name"]]["type"] = ($row["is_primary_key"] ? "PRIMARY" : ($row["is_unique"] ? "UNIQUE" : "INDEX")); + $return[$row["name"]]["lengths"] = array(); + $return[$row["name"]]["columns"][$row["key_ordinal"]] = $row["column_name"]; } return $return; } diff --git a/adminer/drivers/mysql.inc.php b/adminer/drivers/mysql.inc.php index 52614eca..f88735a7 100644 --- a/adminer/drivers/mysql.inc.php +++ b/adminer/drivers/mysql.inc.php @@ -835,7 +835,7 @@ if (!defined("DRIVER")) { */ function trigger_sql($table, $style) { $return = ""; - foreach (get_rows("SHOW TRIGGERS LIKE " . q(addcslashes($table, "%_"))) as $row) { + foreach (get_rows("SHOW TRIGGERS LIKE " . q(addcslashes($table, "%_")), null, "-- ") as $row) { $return .= "\n" . ($style == 'CREATE+ALTER' ? "DROP TRIGGER IF EXISTS " . idf_escape($row["Trigger"]) . ";;\n" : "") . "CREATE TRIGGER " . idf_escape($row["Trigger"]) . " $row[Timing] $row[Event] ON " . table($row["Table"]) . " FOR EACH ROW\n$row[Statement];;\n"; } diff --git a/adminer/drivers/pgsql.inc.php b/adminer/drivers/pgsql.inc.php index 38d484e4..6398aa45 100644 --- a/adminer/drivers/pgsql.inc.php +++ b/adminer/drivers/pgsql.inc.php @@ -251,7 +251,7 @@ ORDER BY a.attnum < 0, a.attnum" $return = array(); $table_oid = $connection2->result("SELECT oid FROM pg_class WHERE relname = " . q($table)); $columns = get_key_vals("SELECT attnum, attname FROM pg_attribute WHERE attrelid = $table_oid AND attnum > 0", $connection2); - foreach (get_rows("SELECT relname, indisunique, indisprimary, indkey FROM pg_index i, pg_class ci WHERE i.indrelid = $table_oid AND ci.oid = i.indexrelid") as $row) { + foreach (get_rows("SELECT relname, indisunique, indisprimary, indkey FROM pg_index i, pg_class ci WHERE i.indrelid = $table_oid AND ci.oid = i.indexrelid", $connection2) as $row) { $return[$row["relname"]]["type"] = ($row["indisprimary"] == "t" ? "PRIMARY" : ($row["indisunique"] == "t" ? "UNIQUE" : "INDEX")); $return[$row["relname"]]["columns"] = array(); foreach (explode(" ", $row["indkey"]) as $indkey) { @@ -269,7 +269,8 @@ FROM information_schema.table_constraints tc LEFT JOIN information_schema.key_column_usage kcu USING (constraint_catalog, constraint_schema, constraint_name) LEFT JOIN information_schema.referential_constraints rc USING (constraint_catalog, constraint_schema, constraint_name) LEFT JOIN information_schema.constraint_column_usage ccu ON rc.unique_constraint_catalog = ccu.constraint_catalog AND rc.unique_constraint_schema = ccu.constraint_schema AND rc.unique_constraint_name = ccu.constraint_name -WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = " . q($table)) as $row) { //! there can be more unique_constraint_name +WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name = " . q($table) //! there can be more unique_constraint_name + ) as $row) { $foreign_key = &$return[$row["constraint_name"]]; if (!$foreign_key) { $foreign_key = $row; diff --git a/adminer/drivers/sqlite.inc.php b/adminer/drivers/sqlite.inc.php index 6faa565e..89ce2f15 100644 --- a/adminer/drivers/sqlite.inc.php +++ b/adminer/drivers/sqlite.inc.php @@ -254,7 +254,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) { $row["Auto_increment"] = ""; $return[$row["Name"]] = $row; } - foreach (get_rows("SELECT * FROM sqlite_sequence") as $row) { + foreach (get_rows("SELECT * FROM sqlite_sequence", null, "") as $row) { $return[$row["name"]]["Auto_increment"] = $row["seq"]; } return ($name != "" ? $return[$name] : $return); diff --git a/adminer/dump.inc.php b/adminer/dump.inc.php index be2a1603..8004b719 100644 --- a/adminer/dump.inc.php +++ b/adminer/dump.inc.php @@ -45,26 +45,16 @@ SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; $out = ""; if ($_POST["routines"]) { foreach (array("FUNCTION", "PROCEDURE") as $routine) { - $result = $connection->query("SHOW $routine STATUS WHERE Db = " . q($db)); - if ($result) { - while ($row = $result->fetch_assoc()) { - $out .= ($style != 'DROP+CREATE' ? "DROP $routine IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "") - . $connection->result("SHOW CREATE $routine " . idf_escape($row["Name"]), 2) . ";;\n\n"; - } - } else { - echo "-- $connection->error\n\n"; + foreach (get_rows("SHOW $routine STATUS WHERE Db = " . q($db), null, "-- ") as $row) { + $out .= ($style != 'DROP+CREATE' ? "DROP $routine IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "") + . $connection->result("SHOW CREATE $routine " . idf_escape($row["Name"]), 2) . ";;\n\n"; } } } if ($_POST["events"]) { - $result = $connection->query("SHOW EVENTS"); - if ($result) { - while ($row = $result->fetch_assoc()) { - $out .= ($style != 'DROP+CREATE' ? "DROP EVENT IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "") - . $connection->result("SHOW CREATE EVENT " . idf_escape($row["Name"]), 3) . ";;\n\n"; - } - } else { - echo "-- $connection->error\n\n"; + foreach (get_rows("SHOW EVENTS", null, "-- ") as $row) { + $out .= ($style != 'DROP+CREATE' ? "DROP EVENT IF EXISTS " . idf_escape($row["Name"]) . ";;\n" : "") + . $connection->result("SHOW CREATE EVENT " . idf_escape($row["Name"]), 3) . ";;\n\n"; } } if ($out) { diff --git a/adminer/include/functions.inc.php b/adminer/include/functions.inc.php index 9903b0e6..efa47981 100644 --- a/adminer/include/functions.inc.php +++ b/adminer/include/functions.inc.php @@ -135,10 +135,6 @@ function html_select($name, $options, $value = "", $onchange = true) { return $return; } - - -// other functions - /** Get INI boolean value * @param string * @return bool @@ -192,7 +188,7 @@ function get_key_vals($query, $connection2 = null) { * @param string * @return array associative */ -function get_rows($query, $connection2 = null) { +function get_rows($query, $connection2 = null, $error = "

") { global $connection; if (!is_object($connection2)) { $connection2 = $connection; @@ -203,6 +199,8 @@ function get_rows($query, $connection2 = null) { while ($row = $result->fetch_assoc()) { $return[] = $row; } + } elseif ($error && (headers_sent() || ob_get_level())) { + echo $error . error() . "\n"; } return $return; } diff --git a/editor/include/adminer.inc.php b/editor/include/adminer.inc.php index d32a6573..965caaf3 100644 --- a/editor/include/adminer.inc.php +++ b/editor/include/adminer.inc.php @@ -67,7 +67,7 @@ FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = " . q($this->database()) . " AND REFERENCED_TABLE_SCHEMA = " . q($this->database()) . " AND REFERENCED_TABLE_NAME = " . q($table) . " -ORDER BY ORDINAL_POSITION") as $row) { //! requires MySQL 5 +ORDER BY ORDINAL_POSITION", null, "") as $row) { //! requires MySQL 5 $return[$row["TABLE_NAME"]]["keys"][$row["CONSTRAINT_NAME"]][$row["COLUMN_NAME"]] = $row["REFERENCED_COLUMN_NAME"]; } foreach ($return as $key => $val) {