diff --git a/CHANGELOG.md b/CHANGELOG.md index 16502d04..711b0de6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ - PostgreSQL: Fix calling functions with name-less parameters - PostgreSQL: Fix calling functions returing table - PostgreSQL: Don't treat user types containing 'file' as blobs (bug #1118) +- PostgreSQL: Export DROP and CREATE DATABASE (bug #1140) - PostgreSQL 11-: Avoid duplicate oid in table status (bug #1089) - Elasticsearch: Support dropping aliases - Plugins: Methods afterConnect(), processList() and killProcess() diff --git a/adminer/drivers/mssql.inc.php b/adminer/drivers/mssql.inc.php index ddb80ea5..6bbe22a6 100644 --- a/adminer/drivers/mssql.inc.php +++ b/adminer/drivers/mssql.inc.php @@ -678,7 +678,7 @@ WHERE sys1.xtype = 'TR' AND sys2.name = " . q($table)) as $row return "TRUNCATE TABLE " . table($table); } - function use_sql($database) { + function use_sql($database, $style = "") { return "USE " . idf_escape($database); } diff --git a/adminer/drivers/mysql.inc.php b/adminer/drivers/mysql.inc.php index d21b5956..7afb1ab9 100644 --- a/adminer/drivers/mysql.inc.php +++ b/adminer/drivers/mysql.inc.php @@ -983,8 +983,17 @@ if (!defined('Adminer\DRIVER')) { } /** Get SQL command to change database */ - function use_sql(string $database): string { - return "USE " . idf_escape($database); + function use_sql(string $database, string $style = ""): string { + $name = idf_escape($database); + $return = ""; + if (preg_match('~CREATE~', $style) && ($create = get_val("SHOW CREATE DATABASE $name", 1))) { + set_utf8mb4($create); + if ($style == "DROP+CREATE") { + $return = "DROP DATABASE IF EXISTS $name;\n"; + } + $return .= "$create;\n"; + } + return $return . "USE $name"; } /** Get SQL commands to create triggers */ diff --git a/adminer/drivers/pgsql.inc.php b/adminer/drivers/pgsql.inc.php index 73f70eaf..da6e6db7 100644 --- a/adminer/drivers/pgsql.inc.php +++ b/adminer/drivers/pgsql.inc.php @@ -1013,8 +1013,16 @@ AND typelem = 0" } - function use_sql($database) { - return "\connect " . idf_escape($database); + function use_sql($database, $style = "") { + $name = idf_escape($database); + $return = ""; + if (preg_match('~CREATE~', $style)) { + if ($style == "DROP+CREATE") { + $return = "DROP DATABASE IF EXISTS $name;\n"; + } + $return .= "CREATE DATABASE $name;\n"; //! get info from pg_database + } + return "$return\\connect $name"; } function show_variables() { diff --git a/adminer/drivers/sqlite.inc.php b/adminer/drivers/sqlite.inc.php index 0b9123f8..c1608eb7 100644 --- a/adminer/drivers/sqlite.inc.php +++ b/adminer/drivers/sqlite.inc.php @@ -680,7 +680,7 @@ if (isset($_GET["sqlite"])) { return "DELETE FROM " . table($table); } - function use_sql($database) { + function use_sql($database, $style = "") { } function trigger_sql($table) { diff --git a/adminer/dump.inc.php b/adminer/dump.inc.php index 500d66ff..79fed196 100644 --- a/adminer/dump.inc.php +++ b/adminer/dump.inc.php @@ -41,16 +41,9 @@ SET foreign_key_checks = 0; foreach ((array) $databases as $db) { adminer()->dumpDatabase($db); if (connection()->select_db($db)) { - if ($is_sql && preg_match('~CREATE~', $style) && ($create = get_val("SHOW CREATE DATABASE " . idf_escape($db), 1))) { - set_utf8mb4($create); - if ($style == "DROP+CREATE") { - echo "DROP DATABASE IF EXISTS " . idf_escape($db) . ";\n"; - } - echo "$create;\n"; - } if ($is_sql) { if ($style) { - echo use_sql($db) . ";\n\n"; + echo use_sql($db, $style) . ";\n\n"; } $out = "";