diff --git a/adminer/drivers/mysql.inc.php b/adminer/drivers/mysql.inc.php index c0dc2e41..96e14672 100644 --- a/adminer/drivers/mysql.inc.php +++ b/adminer/drivers/mysql.inc.php @@ -770,6 +770,24 @@ if (!defined("DRIVER")) { return "USE " . idf_escape($database); } + /** Get SQL commands to create triggers + * @param string + * @param string + * @return string + */ + function trigger_sql($table, $style) { + global $connection; + $result = $connection->query("SHOW TRIGGERS LIKE " . $connection->quote(addcslashes($table, "%_"))); + $return = ""; + if ($result->num_rows) { + while ($row = $result->fetch_assoc()) { + $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 " . idf_escape($row["Table"]) . " FOR EACH ROW\n$row[Statement];;\n"; + } + } + return $return; + } + /** Get server variables * @return array ($name => $value) */ diff --git a/adminer/drivers/sqlite.inc.php b/adminer/drivers/sqlite.inc.php index 028b0e5d..785401e1 100644 --- a/adminer/drivers/sqlite.inc.php +++ b/adminer/drivers/sqlite.inc.php @@ -498,7 +498,7 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) { function create_sql($table) { global $connection; - return $connection->result("SELECT sql FROM sqlite_master WHERE name = " . $connection->quote($table)); + return $connection->result("SELECT sql FROM sqlite_master WHERE type = 'table' AND name = " . $connection->quote($table)); } function use_sql($database) { @@ -506,6 +506,11 @@ if (isset($_GET["sqlite"]) || isset($_GET["sqlite2"])) { return "ATTACH " . $connection->quote($database) . " AS " . idf_escape($database); } + function trigger_sql($table, $style) { + global $connection; + return implode("", get_vals("SELECT sql || ';;\n' FROM sqlite_master WHERE type = 'trigger' AND name = " . $connection->quote($table))); + } + function show_variables() { global $connection; $return = array(); diff --git a/adminer/dump.inc.php b/adminer/dump.inc.php index 28a2d8a7..22d66807 100644 --- a/adminer/dump.inc.php +++ b/adminer/dump.inc.php @@ -80,8 +80,11 @@ SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO'; if ($data) { dump_data($row["Name"], $_POST["data_style"]); } - if ($_POST["triggers"]) { - dump_triggers($row["Name"], $_POST["table_style"]); + if ($_POST["format"] == "sql" && $_POST["triggers"]) { + $triggers = trigger_sql($row["Name"], $_POST["table_style"]); + if ($triggers) { + echo "\nDELIMITER ;;\n$triggers\nDELIMITER ;\n"; + } } if ($ext == "tar") { echo tar_file((DB != "" ? "" : "$db/") . "$row[Name].csv", ob_get_clean()); diff --git a/adminer/include/export.inc.php b/adminer/include/export.inc.php index e0b4797d..6cfa41a8 100644 --- a/adminer/include/export.inc.php +++ b/adminer/include/export.inc.php @@ -9,21 +9,6 @@ function tar_file($filename, $contents) { return $return . str_repeat("\0", 512 - strlen($return)) . $contents . str_repeat("\0", 511 - (strlen($contents) + 511) % 512); } -function dump_triggers($table, $style) { - global $connection; - if ($_POST["format"] == "sql" && $style && support("trigger")) { - $result = $connection->query("SHOW TRIGGERS LIKE " . $connection->quote(addcslashes($table, "%_"))); - if ($result->num_rows) { - $s = "\nDELIMITER ;;\n"; - while ($row = $result->fetch_assoc()) { - $s .= "\n" . ($style == 'CREATE+ALTER' ? "DROP TRIGGER IF EXISTS " . idf_escape($row["Trigger"]) . ";;\n" : "") - . "CREATE TRIGGER " . idf_escape($row["Trigger"]) . " $row[Timing] $row[Event] ON " . idf_escape($row["Table"]) . " FOR EACH ROW\n$row[Statement];;\n"; - } - echo "$s\nDELIMITER ;\n"; - } - } -} - function dump_table($table, $style, $is_view = false) { global $connection; if ($_POST["format"] != "sql") { diff --git a/todo.txt b/todo.txt index 4beb904c..c145be74 100644 --- a/todo.txt +++ b/todo.txt @@ -28,7 +28,7 @@ Saving of MySQL 5 BIT data type - don't use quote() SQLite: CSV import - ON DUPLICATE KEY UPDATE -Export - triggers, CREATE DATABASE +Export - CREATE DATABASE Delimiter in export and SQL command Backward keys in Editor